每一台暴露公网的 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、挖矿查杀等安全教程,一套完整的加固方案就齐了。
