服务器被暴力破解,如何使用密钥登录?

面对服务器被暴力破解的烦恼,很多新手第一反应是换一个复杂密码。
但密码再复杂,只要可被猜测或截获,就存在风险。
更好的方案是抛弃密码,改用密钥登录。
密钥登录基于非对称加密,只有持有私钥的客户端才能登录,攻击者没有私钥,连试探的机会都没有。

准备工作:你需要什么

  • 一台运行 Linux 的服务器(本文以 Ubuntu 22.04 为例,CentOS 同样适用)。
  • 一个有 sudo 权限的服务器用户(建议直接用 root 或具有 sudo 权限的普通用户)。
  • 本地电脑:Windows 用户建议安装 Git Bash 或 WSL(Windows Subsystem for Linux);macOS/Linux 用户直接使用终端。
  • 服务器已开启 SSH 服务(一般默认已安装并运行)。

第一步:在本地生成密钥对

打开本地终端,执行以下命令生成 RSA 密钥对(推荐 4096 位):

ssh-keygen -t rsa -b 4096 -C "my-server-key"

参数说明:

  • -t rsa:指定算法为 RSA。
  • -b 4096:密钥长度,越长越安全。
  • -C:注释标记,方便你记住这个密钥的用途(不强制)。

执行后你会被询问保存路径(默认 ~/.ssh/id_rsa)和设置 passphrase(私钥密码,建议设置,即使私钥被盗也无法直接使用)。
一路回车代表使用默认路径和空密码。

生成完成后,本地 ~/.ssh/ 目录下会多出两个文件:

  • id_rsa:私钥,绝对不能泄露。
  • id_rsa.pub:公钥,可以放心上传到服务器。

第二步:将公钥上传到服务器

推荐使用 ssh-copy-id 命令,它会自动将公钥追加到服务器对应用户的 ~/.ssh/authorized_keys 文件中。

在本地终端执行:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@your-server-ip

user 替换为你的服务器登录用户名,your-server-ip 替换为服务器 IP。
按提示输入用户密码即可完成上传。

如果你的系统没有 ssh-copy-id,也可以手动操作:

  1. 查看公钥内容:
   cat ~/.ssh/id_rsa.pub

复制输出的全部文本。

  1. 使用密码登录服务器,执行:
   mkdir -p ~/.ssh
   chmod 700 ~/.ssh
   echo "粘贴你刚才复制的公钥内容" >> ~/.ssh/authorized_keys
   chmod 600 ~/.ssh/authorized_keys

第三步:测试密钥登录是否生效

保持当前终端窗口不关,另外开一个新终端尝试用密钥登录:

ssh user@your-server-ip

如果配置成功,你会直接进入服务器,无需输入密码(除非你设置了 passphrase)。
如果遇到 Permission denied (publickey) 错误,请检查公钥是否已正确添加,以及 ~/.ssh~/.ssh/authorized_keys 的权限是否正确。

第四步:禁用密码登录,彻底堵死暴力破解

确认密钥登录可用后,再修改 SSH 配置文件,禁止密码登录。

用密钥登录服务器,编辑 SSH 配置文件:

sudo vim /etc/ssh/sshd_config

找到以下两行,确保值为 no

PasswordAuthentication no
ChallengeResponseAuthentication no

如果没有,直接添加。
另外建议确认 PubkeyAuthentication yes 是开启的。

保存文件后,重启 SSH 服务:

sudo systemctl restart sshd

⚠️ 重要:在重启 SSH 服务前,请另开一个终端测试密钥登录是否完全正常
如果新终端能顺利登录,再重启。
否则一旦断开当前连接,你将被锁在服务器外面。

常见踩坑与解决方法

问题1:ssh-copy-id 提示权限拒绝

原因通常是服务器上的 SSH 配置暂时允许密码登录,但 PermitRootLogin 被设为 prohibit-password(禁止 root 用密码登录)。
解决方案:先用其他有密码登录权限的用户操作,或改用手动上传公钥的方式。

问题2:密钥登录成功,但禁用密码后无法登录

你很可能没有正确添加公钥或权限不对。
请重新检查 ~/.ssh/authorized_keys 的权限(应为 600)和 ~/.ssh 的权限(应为 700)。
另外确认 sshd_configPubkeyAuthentication 没有被错误注释或设为 no

问题3:重启 SSH 后连接断开,再也连不上

如果你保留了旧终端,可以尝试在里面恢复配置。
如果旧终端也断了,只能通过服务器控制台(VNC/救援模式)修改文件,或者找机房/云服务商后台重置密码。
这是禁用密码前必须多重验证的原因。

效果验证:攻击者已无机可乘

完成以上步骤后,你的服务器 SSH 只接受密钥登录。
你可以查看系统日志(如 /var/log/auth.log)验证效果:

grep "Failed password" /var/log/auth.log | tail -20

如果日志中不再出现“Failed password”记录,说明暴力破解攻击已经无法再尝试密码登陆。

对于已经遭受暴力破解的服务器,建议在切换密钥登录后立即修改所有用户密码(即使已禁用密码登录,防止其他服务被利用),并检查是否有可疑进程或后门。
如果你正在处理服务器被暴力破解,按下文步骤执行后,安全等级会明显提升。
坚持下去,第一周观察日志确认无异常,后续定期更新系统和 SSH 版本即可。

分享到:
上一篇
Docker 容器资源监控,防止进程异常占用
下一篇
用大模型做安全扫描,如何避免误报?
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意