SSH密钥登录禁用密码防暴力破解:SSH密钥登录配置指南
很多新手站长买了云服务器后,默认使用密码登录 SSH,每天被无数扫描工具暴力破解,迟早会出事。
换成 SSH 密钥登录并彻底关掉密码认证,是目前最主流的防暴力破解手段。
本文从零开始,带你完成这一配置,每一步都附上命令和解释,跟着做就行。
本地生成密钥对
首先在你的本地电脑(不是服务器)上生成一对加密钥匙:私钥自己保留,公钥放到服务器上。
打开本地终端(Linux/Mac 直接开终端,Windows 推荐用 Git Bash 或 PowerShell),输入:
ssh-keygen -t ed25519 -C "你的邮箱或备注"
-t ed25519 指定加密算法,比传统 RSA 更安全且速度快。
按提示选择存放路径(默认 ~/.ssh/id_ed25519)和设置私钥密码(可以直接回车跳过,但建议设一个方便记忆的)。
执行完成后,本地 ~/.ssh/ 目录下会出现两个文件:
id_ed25519—— 你的私钥,必须保管好,不要外传id_ed25519.pub—— 公钥,可以公开,待会要上传到服务器
将公钥上传到服务器
现在把公钥内容复制到服务器上。
最简单的方法是使用 ssh-copy-id 命令:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的服务器IP
输入一次当前密码后,工具会自动把公钥追加到服务器 ~/.ssh/authorized_keys 文件里。
如果你服务器默认禁止 root 登录,请先用普通用户执行,再手动切换。
如果 ssh-copy-id 不可用,手动操作也行:登录服务器后执行以下命令:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
注意公钥内容必须是一整行,从 ssh-ed25519 开始到末尾,不能换行。
测试密钥登录是否生效
在本地终端尝试用密钥登录:
ssh -i ~/.ssh/id_ed25519 root@你的服务器IP
如果一切正常,你会直接进入服务器,不再需要输入密码。
如果弹窗让你输入私钥保护密码,那是正常的,只要输入你生成时设置的密码即可。
禁用密码登录,仅保留密钥认证
确认密钥可以正常登录后,再关闭密码认证。
这一步是防暴力破解的关键,操作前务必确认密钥登录没问题,否则你会把自己锁在外面。
登录服务器,编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
找到以下几行,修改或添加成下面的值:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes
如果你使用的是云服务商的默认镜像,
可能 PasswordAuthentication 已被设为 yes,
直接改成 no。ChallengeResponseAuthentication 和 UsePAM 也建议禁用,
因为某些场景下它们会绕过密钥认证。
保存后重启 SSH 服务:
sudo systemctl restart sshd
避坑指南与常见问题
1. 重启 SSH 后登录失败怎么办?
立即用云服务商提供的 VNC 控制台或 IPMI 进入服务器,把刚才修改的配置恢复,重启 sshd。如果实在进不去,很多云服务商支持重置 SSH 配置的救援模式。
2. 私钥权限必须正确。
本地私钥文件权限不能太宽松,否则 SSH 会拒绝使用。修正方法:
chmod 600 ~/.ssh/id_ed25519
3. 对多个服务器用同一个密钥还是不同密钥?
建议每个服务器独立生成密钥,或至少为不同安全级别的服务器分开管理。
4. 忘记私钥保护密码怎么办?
只能重新生成一对密钥,重新上传公钥。没有找回途径。
验证配置是否生效
打开一个新的终端窗口,尝试用密码登录服务器:
ssh root@你的服务器IP -o PreferredAuthentications=password
如果提示 Permission denied (publickey) 而不是提示密码输入,说明密码认证已被成功禁用。
另外,也可以查看 SSH 日志确认安全状态:
sudo journalctl -u sshd | grep -i "Failed password"
如果没有任何输出,说明暴力破解已经无法通过密码攻击你的服务器了。
常见问题与解答
Q:我按步骤做了,但服务器仍要求输入密码?
A:检查公钥是否完整写入了 authorized_keys,且文件权限是 600,父目录 .ssh 是 700。也可能某些云平台默认安装了 fail2ban 或 pam_tally2 等工具,但密码认证本身没关闭,需确认配置。
Q:禁用密码后,还能用密码登录吗?
A:配置中已关闭所有密码相关选项,除非配置有误,否则不会再接受密码登录。若需要临时恢复密码登录(比如重置密钥),可登录 VNC 控制台再改回来。
Q:我用的不是 ed25519 算法,可以用 RSA 吗?
A:可以,但推荐至少 4096 位长度。命令改为 ssh-keygen -t rsa -b 4096,其他步骤完全相同。
完成以上配置后,你的服务器 SSH 安全等级会大幅提升。
建议定期备份私钥,并开启日志监控以便及时发现异常登录行为。