公网云服务器的 22 端口会持续收到扫描和爆破尝试,查看 /var/log/auth.log(CentOS 系为 /var/log/secure)就能看到大量失败登录。仅靠强密码不够稳妥,常见做法是改用密钥登录并关闭密码认证。但操作顺序不对会把自己锁在服务器外,本文按“先验证、后关闭”的顺序整理。
在本地生成密钥对,推荐 ed25519:
ssh-keygen -t ed25519 -C "your_name@laptop"把公钥部署到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP没有 ssh-copy-id 时,可以手工追加到服务器的 ~/.ssh/authorized_keys,并确认权限正确:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys权限过宽时,sshd 在默认的 StrictModes yes 下会拒绝使用该文件,这是“密钥配好了却登录不上”的常见原因。
保持当前会话不要关闭,另开一个终端测试:
ssh -i ~/.ssh/id_ed25519 user@服务器IP能无密码登录再继续。这一步是防锁死的关键。
编辑 /etc/ssh/sshd_config(部分发行版还会读取 /etc/ssh/sshd_config.d/*.conf,同一指令以先读到的为准,需要检查是否被覆盖):
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
MaxAuthTries 3说明:
PasswordAuthentication no 关闭密码登录。PermitRootLogin prohibit-password 允许 root 使用密钥但禁止密码;条件允许时可改为 no,用普通用户加 sudo。MaxAuthTries 限制单次连接的认证尝试次数。修改后先检查语法,再重载:
sshd -t && systemctl reload sshd在部分发行版里服务名是 ssh,请以实际为准。用 reload 而不是 restart,已有连接不会被断开。
然后再开一个新终端验证:密钥能登录;用 ssh -o PubkeyAuthentication=no user@IP 应被拒绝。确认无误后再关掉旧会话。
可以使用 fail2ban 对多次失败的 IP 临时封禁。最小配置示例(/etc/fail2ban/jail.local):
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h关闭密码认证后,爆破已无法成功,fail2ban 主要用来减少日志噪音和连接资源占用。要注意别把自己的出口 IP 封进去,可以用 ignoreip 加入白名单。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak。sshd -t 无报错后再 reload。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。