1. 为什么需要在新装Ubuntu中安装SSH服务?
刚装好的Ubuntu系统就像个没装门的房子,虽然基础功能齐全,但缺少远程管理的通道。SSH(Secure Shell)就是那把安全的钥匙,让我们能通过网络远程登录服务器进行管理。作为Linux系统管理员,我习惯在系统装完后的第一时间配置SSH服务,这比每次都要接显示器键盘方便太多了。
在运维工作中,90%的服务器管理操作都是通过SSH完成的。特别是对于Ubuntu Server这类无图形界面的系统,SSH更是必备工具。通过22号端口建立的加密通道,我们可以在任何地方执行命令、传输文件,甚至配合X11转发运行图形程序。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的准备工作
2.1 系统版本确认
首先确认你的Ubuntu版本确实是20.04.6。打开终端输入:
bash复制lsb_release -a
你会看到类似这样的输出:
code复制Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
注意:虽然本文以20.04.6为例,但方法同样适用于其他LTS版本。不同版本间的主要区别在于软件包版本,基础配置流程是相通的。
2.2 网络连接检查
安装前确保网络通畅:
bash复制ping -c 4 baidu.com
如果无法ping通,需要先配置网络:
bash复制nano /etc/netplan/*.yaml
修改配置后应用:
bash复制netplan apply
3. 安装SSH服务全流程
3.1 安装openssh-server
Ubuntu默认只安装了SSH客户端(openssh-client),服务端需要手动安装:
bash复制sudo apt update
sudo apt install openssh-server -y
这个命令会安装以下组件:
- sshd:SSH服务守护进程
- sftp-server:安全文件传输服务
- ssh-keygen:密钥生成工具
- 相关依赖库
3.2 服务状态管理
安装完成后,检查服务状态:
bash复制sudo systemctl status ssh
正常应该显示"active (running)"。如果没自动启动,手动开启:
bash复制sudo systemctl enable --now ssh
常用服务管理命令:
| 命令 | 作用 |
|---|---|
sudo systemctl start ssh |
启动服务 |
sudo systemctl stop ssh |
停止服务 |
sudo systemctl restart ssh |
重启服务 |
sudo systemctl enable ssh |
设置开机自启 |
3.3 防火墙配置
Ubuntu默认使用ufw防火墙,需要放行SSH端口:
bash复制sudo ufw allow ssh
# 或者明确指定端口
sudo ufw allow 22/tcp
查看防火墙状态:
bash复制sudo ufw status
4. 安全加固配置
4.1 修改默认配置文件
编辑SSH主配置文件:
bash复制sudo nano /etc/ssh/sshd_config
建议修改的关键参数:
code复制Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码登录(需先配置密钥)
MaxAuthTries 3 # 限制尝试次数
ClientAliveInterval 300 # 超时断开
修改后重启服务生效:
bash复制sudo systemctl restart ssh
4.2 密钥认证配置
比密码更安全的登录方式:
- 本地生成密钥对:
bash复制ssh-keygen -t ed25519
- 将公钥上传到服务器:
bash复制ssh-copy-id -p 2222 username@server_ip
- 测试密钥登录:
bash复制ssh -p 2222 username@server_ip
5. 常见问题排查
5.1 连接被拒绝
可能原因及解决方案:
- 服务未运行 →
sudo systemctl start ssh - 防火墙阻挡 →
sudo ufw allow 2222/tcp - 监听地址限制 → 检查
sshd_config中的ListenAddress
5.2 认证失败
检查方向:
- 密码错误 → 确认用户名密码
- 密钥问题 → 检查
~/.ssh/authorized_keys权限应为600 - SELinux限制 → Ubuntu默认不启用,可忽略
5.3 连接超时
诊断步骤:
bash复制telnet server_ip 2222
nc -zv server_ip 2222
如果不通,检查网络路由、云服务器安全组等。
6. 高级技巧与优化
6.1 多端口监听
在sshd_config中添加:
code复制Port 2222
Port 2223
适合需要同时使用不同防火墙规则的场景。
6.2 日志监控
查看SSH登录日志:
bash复制sudo tail -f /var/log/auth.log | grep sshd
6.3 连接保持
客户端配置~/.ssh/config:
code复制Host *
ServerAliveInterval 60
TCPKeepAlive yes
6.4 Fail2Ban防护
安装配置Fail2Ban防止暴力破解:
bash复制sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local中[sshd]部分启用保护。
7. 实际应用场景示例
7.1 远程开发环境
通过VS Code的Remote-SSH插件连接,实现:
- 远程代码编辑
- 终端集成
- 端口转发
7.2 文件传输
使用scp命令传输文件:
bash复制scp -P 2222 local_file user@host:remote_path
7.3 端口转发
将远程MySQL映射到本地:
bash复制ssh -L 3306:localhost:3306 user@host -p 2222
8. 性能调优建议
8.1 加密算法选择
在sshd_config中指定更高效的算法:
code复制Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
KexAlgorithms curve25519-sha256
8.2 连接数限制
防止资源耗尽:
code复制MaxSessions 10
MaxStartups 10:30:60
8.3 内存优化
对于低配置服务器:
code复制UseDNS no
Compression no
9. 系统升级注意事项
升级到新版本Ubuntu时:
- 备份
/etc/ssh/sshd_config - 卸载旧版:
sudo apt purge openssh-server - 安装新版:
sudo apt install openssh-server - 比较并合并配置文件差异
10. 我的实战经验分享
在管理上百台Ubuntu服务器的过程中,我总结了这些实用技巧:
-
配置模板化:将优化后的
sshd_config保存为模板,新服务器直接复用 -
密钥集中管理:使用Ansible批量部署公钥到所有服务器
-
双因素认证:对重要服务器配置Google Authenticator
-
监控告警:设置Zabbix监控SSH登录失败次数
-
定期审计:每月检查
/var/log/auth.log中的异常登录
最后提醒:修改SSH端口后,记得更新所有自动化脚本和工具的连接配置。我曾经因为忘记更新Ansible的inventory文件,导致批量管理任务全部失败。
