SSH 安全加固完整教程:密钥登录、禁用密码、防爆破,让服务器再也攻不破


每一台暴露公网的 VPS,22 端口每天都在被无数脚本扫描和爆破——试密码、试账号、找漏洞。默认的 SSH 配置(root + 密码登录)很容易成为突破口。SSH 安全加固是服务器上线后第一件要做的事。这篇文章按"从危险到安全"的顺序,把 SSH 加固的每一步操作和原理讲清楚,照着做就能大幅提升服务器的安全性。

一、SSH 默认配置有多危险

Linux 服务器默认状态往往是:

  • root 账号允许远程登录:攻击者只需猜对 root 密码就拿下全机
  • 密码登录开启:可以被暴力破解(每秒试几百上千次)
  • 端口固定 22:被无数扫描器重点照顾
  • 无登录限制来源:任何 IP 都能尝试连接

下面是逐步加固的方案。

二、第一步:改用密钥登录(最重要)

密钥登录用一对"公钥/私钥"验证,远比密码安全,几乎无法暴力破解。

1. 在本地电脑生成密钥对(Windows/Mac):

ssh-keygen -t rsa -b 4096

连按回车用默认路径,会生成 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。可以设个密码保护私钥。

2. 把公钥上传到服务器:

ssh-copy-id root@服务器IP

它会自动把公钥追加到服务器 ~/.ssh/authorized_keys。没有 ssh-copy-id 就手动:

# 在服务器上
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3. 测试密钥登录:

ssh root@服务器IP

确认免密登录成功后,再进行下一步(在设禁用密码前务必先确认密钥能登录,否则容易把自己锁在门外)。

三、第二步:编辑 sshd 配置

SSH 服务端配置文件是 /etc/ssh/sshd_config,改前先备份:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

以下配置项是核心加固点:

# 1. 禁用 root 直接登录(用普通用户 + sudo 更安全)
PermitRootLogin no

# 2. 关闭密码登录,只能用密钥
PasswordAuthentication no

# 3. 禁用空密码
PermitEmptyPasswords no

# 4. 不直接用 root 登录时可限制允许的用户,用一条白名单
AllowUsers yourname    # yourname 改成你的普通用户

# 5. (可选)修改默认端口,减少被扫描命中
Port 2222

特别注意: 改 PasswordAuthentication no 前,务必确认密钥已能登录,否则会把自己锁在外面!如果不确定,先只改 Port 和 PermitRootLogin,等密钥就绪再关密码。

保存后检查语法并重启:

sshd -t                  # 检查配置语法,无报错再继续
systemctl restart sshd   # 重启 SSH(或 systemctl restart ssh)

用新配置测试登录一次成功,再关掉当前会话,避免改错导致失联。

四、第三步:针对生产环境的选择

以下二选一或多选,按你对安全与便捷的权衡:

方案 A:改端口(简单有效)

把 Port 2222 换成高端口,能绕过绝大多数无脑扫描器。缺点是不方便记忆、个别环境对非标端口有限制。改完用 ssh -p 2222 root@IP 登录。

方案 B:IP 白名单(最安全,适合固定办公 IP)

# 在 /etc/hosts.allow 和 hosts.deny 或防火墙里限制

用防火墙(iptables/ufw)只允许你的固定 IP 访问 22 端口,其他 IP 一律拒绝,这是最彻底的方案。参考本站 iptables 防火墙教程。

方案 C:配合 Fail2ban(自动封禁爆破 IP)

即使开了密钥登录,Fail2ban 也能监控 SSH 失败并自动封禁源 IP,双保险。安装配置方法见本站 Fail2ban 相关教程,或自行搜索。

五、第四步:改完后的测试

务必备一份"逃生计划":改配置前先用一个会话确认密钥能登录,改完配置后不要立刻关闭当前会话,而是新开一个窗口验证能登录,确认无误再关闭旧的。否则配置写错会把唯一通道封死。

验证当前 SSH 状态:

ss -tlnp | grep ssh    # 确认监听端口
grep -E 'PasswordAuthentication|PermitRootLogin|Port' /etc/ssh/sshd_config

六、常见问题与自救

Q1:不小心把自己锁在门外了怎么办?

  • 若商家有 VNC/控制台/noVNC 入口,用它进入服务器,改回 sshd_config 并重启 SSH。(参考本站 VNC 重置密码教程的思路)
  • 或用商家后台的"一键重置"功能恢复(会丢数据,慎用)。

Q2:换端口后登录命令怎么写?

ssh -p 2222 root@IP
# 或简写配置到 ~/.ssh/config
Host myserver
    HostName 服务器IP
    Port 2222
    User root

Q3:改了 AllowUsers 后普通用户登不了了?

AllowUsers 是列表写法,确认用户名拼写、以及该用户确实存在。可先注释掉后重启验证。

Q4:还能用密码登录的云主机后台/面板怎么办?

阿里云/腾讯云/宝塔面板等管理入口各有独立登录方式,和 SSH 无关,但仍建议给这些入口设置强密码和二次验证。

七、补充:日常密码与账号纪律

即使 SSH 已加固,也要养成习惯:

  • 少用 root,用普通用户 + sudo 执行特权操作(参考本站 sudo 教程)
  • 服务器登录密码用强密码,定期更换
  • 定期 tail -f /var/log/auth.log 或看 /var/log/secure,留意异常登录尝试
  • 开启系统更新,保持内核和软件补丁最新

总结

SSH 加固四步走:换密钥登录 → 禁用密码/禁 root → 改端口或白名单 → 测试不锁死角,配合 Fail2ban 更稳。做完这套,暴力破解基本对你就失效了。安全无小事,多花十分钟配置,能给服务器省下无数麻烦。配合本站的 iptables、Fail2ban、挖矿查杀等安全教程,一套完整的加固方案就齐了。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Redis 安装与配置教程:缓存、持久化、密码与常用命令,网站提速火力全开

Nginx 日志切割与清理教程:logrotate 自动轮转、定期归档,日志不再撑爆磁盘

评 论
更换验证码