SSH密钥登录配置禁用密码登录防爆破

为什么要用密钥登录取代密码登录?

服务器暴露在公网上时,SSH端口(默认22)每天都可能被自动化脚本暴力尝试密码登录。
即使你设置了复杂密码,也挡不住持续的猜解。SSH密钥登录使用一对非对称加密的密钥来验证身份:私钥留在本地,公钥放在服务器上。
攻击者即使拿到服务器IP和用户名,没有私钥也无法登录。
配置完成后禁用密码登录,可以从根本上防SSH爆破。

准备工作

操作前请确认以下几点:

  • 你有一台Linux服务器(以Ubuntu 20.04/22.04、CentOS 7/8为例),已开通SSH服务并能通过密码登录。
  • 本地电脑安装了SSH客户端(Windows 10/11自带OpenSSH,macOS/Linux自带终端)。
  • 拥有服务器的root权限或具有sudo权限的用户。

生成SSH密钥对

在本地电脑打开终端(Windows打开PowerShell或cmd),执行以下命令生成密钥对:

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:指定密钥类型为Ed25519,安全且速度快。也可以使用传统的-t rsa -b 4096,但Ed25519是当前推荐方案。
  • -C:添加备注,通常写自己的邮箱或机器名,方便管理。

按提示设置密钥保存路径(默认 ~/.ssh/id_ed25519)和密码短语(passphrase,可以为空,但建议设置以防私钥泄露)。
执行完后会在当前用户目录下的 .ssh 文件夹里生成两个文件:id_ed25519(私钥)和 id_ed25519.pub(公钥)。私钥请妥善保管,不要泄露给任何人。

上传公钥到服务器

将生成的公钥内容添加到服务器的 ~/.ssh/authorized_keys 文件中。
可以使用 ssh-copy-id 工具一键完成:

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

执行后输入当前用户的密码,公钥会被自动追加到服务器上对应用户的 authorized_keys 文件中。
如果系统没有 ssh-copy-id,也可以手动复制公钥内容,登录服务器后执行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
注意:authorized_keys 文件的权限必须是600,.ssh目录权限必须是700,否则SSH会拒绝使用密钥认证。

修改SSH配置禁用密码登录

确认密钥登录已生效后(后面会验证),再修改配置文件彻底禁用密码登录。
用编辑器以root权限打开SSH配置文件:

sudo nano /etc/ssh/sshd_config

找到或添加以下参数,修改为指定值:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password   # 如果允许root密钥登录,设置为without-password;禁止root登录则设为no
  • PubkeyAuthentication yes:启用公钥认证。
  • PasswordAuthentication no:禁用密码登录,这是防爆破的关键。
  • ChallengeResponseAuthentication no:关闭挑战-响应认证(一般不需要)。
  • PermitRootLogin:如果想让root使用密钥登录,设为prohibit-password或without-password;如果希望更安全,设为no。

保存文件后,重启SSH服务使配置生效:

sudo systemctl restart sshd

验证配置并测试

重要:不要关闭当前SSH连接,新开一个终端窗口测试密钥登录是否正常。

在新终端执行:

ssh -i ~/.ssh/id_ed25519 user@your-server-ip

如果成功登录则说明密钥认证生效。
再尝试使用密码登录(故意输错密码或只按回车),如果提示 Permission denied (publickey) 而没有要求输入密码,则代表密码登录已禁用。

如果新窗口登录失败,检查公钥是否添加正确,sshd_config 是否有语法错误(可用 sshd -t 检查),以及文件权限是否正确。恢复方式:切回旧窗口,修改配置临时开启密码登录,排错后再关闭。

常见问题与避坑

Q:密钥登录失败,提示“Permission denied (publickey)”?
A:最常见的三种原因:公钥未正确追加到 ~/.ssh/authorized_keys、.ssh或authorized_keys权限不对、sshd_config中PubkeyAuthentication未设为yes。

Q:禁用密码登录后,本地私钥丢失怎么办?
A:如果没留其他登录方式(如VNC、云控制台VNC),你将无法登录服务器。建议在禁用密码前先保留一个root密码登录的后备方案(如云服务商的救援模式),或者先测试密钥登录稳定后再禁用密码。

Q:需要多台服务器管理,是否每台都要单独上传公钥?
A:是的,每台服务器都需要将同一份公钥添加到对应用户的 authorized_keys 中。也可以使用SSH配置文件管理不同主机的私钥。

Q:是否必须重启SSH服务?
A:是的,修改 sshd_config 后必须重启SSH服务(systemctl restart sshd)或重新加载(systemctl reload sshd)才能使新配置生效。

完成上述步骤后,你的服务器SSH登录将只接受密钥认证,密码登录被彻底关闭,SSH暴力破解脚本基本失效。
建议同时开启防火墙限制SSH源IP(如有固定办公IP),并考虑更换SSH端口(非22)进一步降低扫描风险。

分享到:
上一篇
磁盘分区无损扩容脚本扩展站点存储空间
下一篇
跨域API接口Nginx完整修复配置外贸站点
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意