最直接有效的方式是彻底关闭SSH密码认证并强制密钥登录。需先生成ed25519或4096位RSA密钥对,用ssh-copy-id上传公钥或手动配置authorized_keys权限,确认密钥登录成功后再修改sshd_config禁用PasswordAuthentication、启用PubkeyAuthentication、禁止空密码及root登录,最后重启sshd并用fail2ban加固。

最直接有效的方式是彻底关闭 SSH 密码认证,强制只允许密钥登录。只要 PasswordAuthentication 设为 no 且确认生效,暴力破解就失去入口——因为攻击者再怎么试密码,服务端根本不会接受。
确认并启用密钥登录
操作前必须确保密钥已可用,否则会锁死自己:
- 在本地生成强密钥对:ssh-keygen -t ed25519(推荐)或 ssh-keygen -t rsa -b 4096
- 用 ssh-copy-id user@server_ip 上传公钥;若失败,手动创建 ~/.ssh 目录(chmod 700 ~/.ssh),追加公钥到 authorized_keys(chmod 600 ~/.ssh/authorized_keys),SELinux 环境下补一句 restorecon -Rv ~/.ssh
- 新开终端测试能否用密钥顺利登录,成功后再进行下一步
修改 SSH 配置禁用密码
编辑 /etc/ssh/sshd_config,确保以下几行明确设置且未被注释:
- PasswordAuthentication no(核心项,必须关闭)
- PubkeyAuthentication yes(默认通常开启,但需确认)
- PermitEmptyPasswords no(防空密码绕过)
- AuthorizedKeysFile .ssh/authorized_keys(确认路径正确)
保存后运行 sudo systemctl restart sshd 生效。切勿关闭当前连接再验证,务必保留一个已登录的终端用于回滚。
配套加固避免留后门
单关密码不够,还需堵住其他常见突破口:
- 禁用 root 远程登录:PermitRootLogin no
- 限制可登录用户范围:AllowUsers deploy(替换为你的实际用户名)
- 配合 fail2ban:即使密钥登录为主,它仍能封禁反复试探的 IP,建议设 maxretry = 3、findtime = 120、bantime = 86400
- 检查日志验证效果:sudo tail -n 20 /var/log/auth.log | grep "password",应无“Accepted password”或“Failed password”记录
不复杂但容易忽略。做完这三步,SSH 就不再响应任何密码尝试,暴力破解自然失效。


















