SSH密钥登录配置禁用密码登录防暴力破解
SSH密钥登录配置和禁用密码登录,是防止服务器被暴力破解最直接有效的手段。
本文面向零基础用户,从生成密钥对到修改sshd配置逐步演示,最终让你彻底关闭密码登录通道,即使攻击者不断尝试密码也无法进入系统。
全程使用命令和配置文件,按顺序操作即可完成部署。
在本地生成密钥对
密钥对分为私钥和公钥:私钥留在自己电脑上,公钥放到服务器。
首先在本地终端执行以下命令生成密钥对,建议使用Ed25519算法,安全性高且长度更短:
ssh-keygen -t ed25519 -C "你的备注标识"
运行后会询问保存路径,直接回车使用默认路径 ~/.ssh/id_ed25519。
随后会让你设置密钥口令(passphrase),建议设置一个,即使私钥泄露也无法直接使用。
口令可留空,但安全性会降低。
生成完成后,查看公钥内容:
cat ~/.ssh/id_ed25519.pub
复制这段以 ssh-ed25519 开头的完整字符串,下一步要用。
将公钥安装到服务器
登录服务器,在服务器上创建 ~/.ssh 目录并写入公钥。
一种简单的方式是使用 ssh-copy-id 命令:
ssh-copy-id -i ~/.ssh/id_ed25519.pub 用户名@服务器IP
如果服务器没有 ssh-copy-id,也可以手动添加:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
注意公钥要整体粘进去,不要折行。
设置完成后,先重新开一个终端,用密钥方式登录测试:
ssh 用户名@服务器IP
如果无需输入密码就能登录(设置了密钥口令的话需输入口令),说明公钥安装成功。
修改 SSH 配置并重启服务
确认密钥登录无问题后,再修改 sshd 配置禁用密码登录。
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
找到或新增以下三项,确保值正确:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
修改完成后先测试配置语法:
sudo sshd -t
没有输出即代表语法正确。
然后重启 SSH 服务:
sudo systemctl restart sshd
重启后不要关闭当前连接,请再开一个新终端尝试用密码登录,应该会提示 Permission denied (publickey)。
如果还能用密码登录,可能是配置文件里有其他覆盖项,或者你修改的不是实际生效的配置文件。
避坑指南:这几点最容易搞错
- 不要直接退出当前 SSH 会话:改完配置后必须先保留一个连接,避免新配置有误导致无法登录。
- 检查是否还有其他
PasswordAuthentication配置:某些发行版会在/etc/ssh/sshd_config.d/下放置覆盖文件,使用grep -r PasswordAuthentication /etc/ssh/搜索所有相关位置,确保没有冲突值。 - 权限必须严格设置:
.ssh目录权限为700,authorized_keys文件权限为600,权限过松会导致 SSH 拒绝使用公钥认证。
验证安全效果并收尾
使用以下命令检查当前 SSH 认证方式是否只剩公钥:
ssh -v 用户名@服务器IP
输出中会显示 Authentications that can continue: publickey。
此时暴力破解工具即使扫描到你的 SSH 端口,也无法通过密码爆破进入。
后续如果需要再次禁用密码登录,只需反向修改配置即可。
建议定期检查 ~/.ssh/authorized_keys 中是否存在多余的公钥,避免留下后门。
如果你正在配置其他服务器或刚接收一台新机器,按本文步骤操作一遍就能明显降低被入侵的风险。