在 Ubuntu 服务器运维中,SSH 几乎是最常用的远程登录入口。它方便高效,但一旦配置粗放,也可能成为暴力破解、弱口令和越权登录的主要风险点。本文围绕 Ubuntu 服务器 SSH 远程登录配置与安全加固实践,整理一套适合日常部署的操作思路与检查清单 🔐。
一、安装并确认 SSH 服务状态
Ubuntu 通常使用 OpenSSH 作为 SSH 服务端组件。官方文档说明,OpenSSH 可用于远程控制主机和安全传输数据,服务端配置主要由 sshd 负责,可参考 Ubuntu OpenSSH Server 官方文档。
首次配置时,建议先更新软件源并安装 openssh-server:
sudo apt update
sudo apt install openssh-server
安装完成后,检查服务是否正在运行:
sudo systemctl status ssh
如果服务未启动,可以执行:
sudo systemctl enable --now ssh
这里的重点不是“能连上就行”,而是先确认服务来源可靠、状态正常、启动方式清晰。生产环境中还应记录服务器 IP、登录用户、开放端口和变更时间,便于后续审计。
二、理解 SSH 配置文件位置
Ubuntu 的 SSH 服务端配置通常位于 /etc/ssh/sshd_config,同时也可能通过 /etc/ssh/sshd_config.d/ 目录加载额外配置片段。Ubuntu 文档提到,使用配置片段有助于把自定义设置与系统默认配置分开,方便维护和升级,详情可见 官方配置说明。
修改前建议先备份原文件:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
编辑配置时可以使用 nano 或 vim:
sudo nano /etc/ssh/sshd_config
每次修改后不要急着重启服务,建议先检查配置语法:
sudo sshd -t
如果没有输出错误,再执行重载或重启:
sudo systemctl reload ssh
三、使用密钥登录替代密码登录
SSH 支持多种认证方式,包括密码认证和公钥认证。OpenSSH 手册对 sshd_config 的配置项有详细说明,可参考 sshd_config 手册。实际运维中,更推荐使用密钥登录,因为密钥认证能减少弱口令和撞库攻击带来的风险。
在客户端生成密钥:
ssh-keygen -t ed25519 -C "server-login"
将公钥复制到服务器:
ssh-copy-id user@server_ip
确认密钥可正常登录后,再逐步关闭密码登录。可在 SSH 配置中设置:
PasswordAuthentication no
PubkeyAuthentication yes
注意:关闭密码登录前,一定要保留一个已验证可用的 SSH 会话,不要直接断开当前连接。否则一旦密钥配置有误,可能把自己锁在服务器外面 😅。
四、禁止 root 直接远程登录
root 账户权限过高,一旦被攻破,攻击者可以直接控制整台服务器。更稳妥的方式是使用普通用户登录,再通过 sudo 执行管理命令。
建议在配置文件中设置:
PermitRootLogin no
如果确实需要临时使用 root 权限,应通过普通用户登录后执行 sudo,而不是开放 root 远程入口。这样既能降低暴露面,也方便在系统日志中追踪具体操作用户。
五、限制允许登录的用户或用户组
在多人协作或业务服务器中,不建议让所有系统用户都具备 SSH 登录能力。可以使用 AllowUsers 或 AllowGroups 做白名单控制。
例如只允许指定用户登录:
AllowUsers deploy adminuser
或者只允许某个用户组登录:
AllowGroups sshusers
这种做法简单但很有效,尤其适合 Web 服务器、数据库中转机、跳板机等场景。权限边界越清晰,后期排查问题越容易。
六、调整端口与防火墙策略
SSH 默认端口是 22。修改端口不能替代真正的安全措施,但可以减少来自互联网的低质量自动扫描。比如改为一个非默认端口:
Port 2222
修改端口后,务必同步放行防火墙规则。如果使用 UFW,可以执行:
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status
确认新端口可以正常连接后,再关闭旧端口规则。远程服务器上操作防火墙要格外谨慎,建议保留当前会话,并在云服务商安全组中同步检查入站规则。
七、降低暴力破解风险
SSH 暴露在公网时,暴力破解是常见风险。除了关闭密码登录,还可以限制认证尝试次数、缩短空闲连接时间,并结合日志监控。
可参考以下配置:
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
这些配置的含义分别是减少认证尝试次数、限制登录等待时间、检测空闲连接并在多次无响应后断开。具体参数应结合业务场景调整,避免影响正常的自动化运维任务。
八、谨慎开放转发功能
SSH 不只用于登录,还支持端口转发、代理转发和 X11 转发。这些功能在跳板机、隧道访问、图形应用转发中很有用,但如果管理不当,也可能被滥用为内网穿透通道。
如果服务器不需要这些能力,可以考虑关闭:
AllowTcpForwarding no
X11Forwarding no
AllowAgentForwarding no
不过需要注意,部分 CI/CD、堡垒机或运维工具可能依赖转发功能。调整前应先确认业务依赖,避免“一刀切”导致发布、备份或远程管理失败。
九、配置日志审计与日常检查
SSH 安全加固不是一次性操作,而是持续维护。日常可以通过以下命令查看登录记录:
last
lastlog
sudo journalctl -u ssh
重点关注异常来源 IP、频繁失败登录、非工作时间登录、陌生用户登录等情况。若服务器暴露在公网,建议配合 Fail2ban、云防火墙、安全组策略或堡垒机进行集中管控。
十、推荐的加固检查清单 ✅
- 确认 SSH 服务来源:使用系统软件源安装 openssh-server,避免来源不明的服务端程序。
- 启用密钥登录:先验证密钥可用,再关闭密码登录。
- 禁止 root 直登:使用普通用户加 sudo 的方式管理服务器。
- 限制登录范围:通过 AllowUsers 或 AllowGroups 控制可登录对象。
- 检查防火墙:SSH 端口变更后,同步调整 UFW 和云安全组。
- 减少暴力破解面:限制失败尝试次数,缩短登录等待时间。
- 关闭非必要功能:不需要转发、X11、代理转发时应禁用。
- 保留回滚方案:修改前备份配置,重启前执行 sshd -t 检查。
总结
Ubuntu 服务器 SSH 远程登录配置的核心目标,是在保证可维护性的前提下减少暴露面。安装 OpenSSH 只是第一步,更重要的是使用密钥认证、禁止 root 直登、限制登录用户、合理配置防火墙,并持续关注日志与异常行为。
对于个人服务器,可以从“密钥登录 + 禁止 root + UFW 放行指定端口”做起;对于生产环境,则建议进一步引入堡垒机、集中日志审计和定期权限复核。SSH 是服务器的大门,配置得越规范,后续运维就越稳。🚀