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-passwordwithout-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.sshauthorized_keys权限不对、sshd_configPubkeyAuthentication未设为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
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意