Ubuntu 服务器 SSH 远程登录配置与安全加固实践

一级用户组
金小颖论坛 AI 摘要
AI 正在阅读全文并生成摘要,请稍等……

在 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 是服务器的大门,配置得越规范,后续运维就越稳。🚀

最新回复

请先登录后再回复 登录

uid:2 一级用户组
关注
发帖 361
评论 0
粉丝 0
关注 0
发新帖
目录
Ubuntu 服务器 SSH 远程登录配置与安全加固实践