SSH 加固三板斧:把你 VPS 的大门焊死

先看现状

journalctl -u ssh --since "24 hours ago" | grep -c "Failed password"

跑一下,几千条撞库是常态。公网上的 VPS,只要 22 端口开着,全世界的肉鸡都在轮着试你的 root 密码。这不是"会不会被扫"的问题,是"每分钟被扫几次"的问题。

下面三板斧,一斧比一斧狠,但每一斧都有"别把自己锁门外"的保命提醒。

第一斧:密钥登录,关掉密码

# 先把公钥拷上去
ssh-copy-id user@你的VPS

# 确认密钥能登录后,再改配置
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
sudo systemctl reload sshd

保命提醒:改之前,先留一个已登录的会话别关,另开一个窗口测试密钥登录。确认新窗口能进,再动配置。把自己锁在门外是最蠢的翻车,没有之一。

第二斧:fail2ban,撞库就封 IP

sudo apt install fail2ban
sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
bantime = 3600

5 次失败封 1 小时。看战果:fail2ban-client status sshd,banned 列表里躺着的都是半夜来撞门的。

第三斧:改端口 + 禁 root 直登

# /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo systemctl reload sshd

改端口不是"安全",是"清净"——99% 的自动化撞库只扫 22,换个端口日志瞬间干净。配合前两斧,效果叠加。

保命提醒:改端口前先 ufw allow 2222,再删 22 的规则。顺序反了一样把自己锁门外。

验证

# 从外面试密码登录,应该直接被拒
ssh -o PreferredAuthentications=password user@VPS -p 2222
# Permission denied (publickey).

# 看 fail2ban 战果
sudo fail2ban-client status sshd

三板斧砍完,你的 VPS 从"大门敞开"变成"连门牌号都换了"。撞库脚本扫过去,只会默默走开,找下一家没关门的。