0

SSH密钥登录配置教程:告别密码3步实现安全免密登录

2026.05.20 | youres | 19次围观

为什么要用SSH密钥登录

密码登录有个天大的问题——容易被暴力破解。不管你密码设得多复杂,只要有人愿意花时间试,总有概率撞开。而且每次登录都要输密码,烦不烦?

SSH密钥登录从根本上解决了这两个痛点:

  • 几乎不可能被暴力破解——RSA 4096位密钥,暴力攻击的难度是天文数字级别
  • 登录免输密码——配置好之后,ssh一行命令直接进服务器
  • 私钥不离开本地——服务器只存公钥,就算服务器被黑也拿不到你的私钥

第一步:生成密钥对

密钥对就是一把锁和一把钥匙的关系:公钥是锁,装在服务器上;私钥是钥匙,留在你自己电脑上。

本地电脑上执行:

ssh-keygen -t rsa -b 4096 -C "your_comment"

参数解释:

  • -t rsa:密钥类型选RSA,兼容性最好
  • -b 4096:密钥长度4096位,安全强度足够
  • -C "your_comment":注释信息,方便识别是哪台机器的密钥

执行后会有三个提示:

  1. 保存位置——直接回车用默认路径 ~/.ssh/id_rsa
  2. 密码短语(passphrase)——建议设置,给私钥再加一层保护;不设也可以,登录更方便
  3. 确认密码短语——再输一遍

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

  • id_rsa——私钥,绝对不能泄露
  • id_rsa.pub——公钥,需要上传到服务器

如果想用Ed25519密钥

Ed25519比RSA更快更短,也是推荐选项:

ssh-keygen -t ed25519 -C "your_comment"

大多数现代SSH客户端和服务端都支持。如果你的环境比较老旧,还是用RSA更稳妥。

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

最简单的方法是用 ssh-copy-id

ssh-copy-id user@your_server_ip

输入一次服务器密码,公钥就自动写入服务器的 ~/.ssh/authorized_keys 文件了。

如果没有ssh-copy-id

某些系统没装这个命令,手动操作也不难:

cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

这一行的意思:把本地公钥内容通过SSH传到服务器,追加到authorized_keys里。

权限必须正确

SSH对权限要求很严格,权限不对密钥登录会静默失败:

# 在服务器上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

第三步:测试并禁用密码登录

先用密钥登录试一下:

ssh user@your_server_ip

如果能直接进服务器不用输密码,说明配置成功。

确认密钥登录没问题后,禁用密码登录是关键安全步骤:

# 在服务器上编辑SSH配置
sudo vi /etc/ssh/sshd_config

找到并修改这两项:

PasswordAuthentication no
PubkeyAuthentication yes

重启SSH服务:

sudo systemctl restart sshd

⚠️ 重要提醒:禁用密码登录前,务必确认密钥登录已经正常工作!否则改了配置你自己也登不进去,只能找机房救援了。

多台机器共用一个密钥

如果你有多台服务器,同一个公钥可以上传到所有服务器。只要把公钥追加到每台机器的 authorized_keys 就行:

ssh-copy-id user@server1_ip
ssh-copy-id user@server2_ip

每个服务器都会独立验证,互不影响。

常见问题排查

密钥登录失败怎么办

排查清单,按顺序检查:

  1. 权限——~/.ssh 700,authorized_keys 600,这是最常见的坑
  2. authorized_keys内容——确认公钥确实写入了,没被截断或多了换行
  3. sshd_config——PubkeyAuthentication必须是yes
  4. 私钥路径——默认~/.ssh/id_rsa,如果你改了位置需要ssh -i指定
  5. 用户目录权限——home目录不能被其他用户写(chmod 750 ~)

查看SSH调试信息

登录时加 -v 参数能看到详细过程:

ssh -v user@your_server_ip

日志会告诉你到底在哪一步失败的,比瞎猜靠谱得多。

服务器端调试

如果客户端调试还不够,在服务器上看SSH日志:

sudo tail -f /var/log/auth.log   # Ubuntu/Debian
sudo tail -f /var/log/secure      # CentOS/RHEL

Windows用户怎么配置

Windows 10及以上自带OpenSSH客户端,PowerShell里直接用 ssh-keygen 和 ssh-copy-id,跟Linux操作完全一样。

如果用PuTTY,需要把OpenSSH格式的私钥转换成PPK格式:

  • 用PuTTYgen加载id_rsa私钥
  • 点击"Save private key"生成PPK文件
  • 在PuTTY连接设置里选Connection → SSH → Auth,指定PPK文件

安全建议

  • 给私钥设passphrase——就算私钥文件被盗,没有passphrase也无法使用
  • 不要把私钥传到服务器——私钥只存本地,永远不上传
  • 定期更换密钥——建议每年换一次,特别是团队离职场景
  • 备份私钥——丢了私钥就登不进服务器了,务必安全备份
  • 不同环境用不同密钥——生产环境和工作环境分开,降低风险

相关文章推荐

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论
883文章数 0评论数
作者其它文章