如何在 Linux VPS 上保护 SSH 安全

作者 ONIE 工程团队 · 更新于 2026年11月12日 · 阅读需 1 分钟

公网 VPS 上线后几分钟内就会遭到自动化的登录尝试。以下步骤可以大幅提高 SSH 的抗攻击能力。本文面向 Ubuntu 或 Debian 编写;如果你还没有服务器,可以租用 Linux VPS,从干净的系统镜像开始。在第二个窗口中测试新配置之前,请保持当前的 SSH 会话处于打开状态。

1. 创建带 sudo 权限的普通用户

adduser deploy
usermod -aG sudo deploy

2. 使用 SSH 密钥代替密码

在你自己的电脑上执行:

ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IP

在关闭密码登录之前,先用密钥登录一次,确认其可以正常工作。

3. 关闭密码登录和 root 登录

创建 /etc/ssh/sshd_config.d/99-hardening.conf:

PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3

检查语法并重新加载服务。在 Ubuntu 和 Debian 上服务名为 ssh,在基于 RHEL 的系统上为 sshd:

sudo sshd -t && sudo systemctl reload ssh

打开第二个终端并重新登录。只有确认可以登录后,才关闭旧会话。

4. 启用防火墙

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

只开放你需要的端口,例如网站服务器所需的 80 和 443 端口。你也可以在云控制台中设置防火墙规则,将 SSH 访问限制为你自己的 IP 地址。

5. 使用 Fail2ban 阻止反复失败的登录

sudo apt install -y fail2ban

创建 /etc/fail2ban/jail.local:

[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

6. 自动安装安全更新

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

7. 可选的补充措施

  • 更改 SSH 端口可以减少日志噪音,但它本身不是安全措施。
  • 为私钥设置口令(passphrase),并将备份保存在安全的地方。
  • 使用 last 和 sudo journalctl -u ssh --since today 查看登录记录。
  • 服务器配置完成后,创建一个快照,以便将系统恢复到干净的基线状态。

如果你被锁在服务器之外,可以使用云控制台中的浏览器控制台登录并修复配置。我们的 DDoS 防护指南 介绍了下一层防御措施。

常见问题

禁用 root 登录安全吗?

安全,前提是你已先创建 sudo 用户并测试其密钥可以正常工作。之后你仍然可以使用 sudo 执行管理命令。

如果只使用密钥,还需要 Fail2ban 吗?

这不是必须的。关闭密码登录后,暴力破解无法成功,但 Fail2ban 可以减少日志噪音和系统负载。

如果丢失了 SSH 密钥怎么办?

使用云控制台中的控制台登录,将新的公钥添加到 ~/.ssh/authorized_keys 中,并删除旧的公钥。

参考资料与延伸阅读

更多 VPS 指南