为什么要用SSH密钥登录
密码登录有个天大的问题——容易被暴力破解。不管你密码设得多复杂,只要有人愿意花时间试,总有概率撞开。而且每次登录都要输密码,烦不烦?
SSH密钥登录从根本上解决了这两个痛点:
- 几乎不可能被暴力破解——RSA 4096位密钥,暴力攻击的难度是天文数字级别
- 登录免输密码——配置好之后,ssh一行命令直接进服务器
- 私钥不离开本地——服务器只存公钥,就算服务器被黑也拿不到你的私钥
第一步:生成密钥对
密钥对就是一把锁和一把钥匙的关系:公钥是锁,装在服务器上;私钥是钥匙,留在你自己电脑上。
在本地电脑上执行:
ssh-keygen -t rsa -b 4096 -C "your_comment"
参数解释:
-t rsa:密钥类型选RSA,兼容性最好-b 4096:密钥长度4096位,安全强度足够-C "your_comment":注释信息,方便识别是哪台机器的密钥
执行后会有三个提示:
- 保存位置——直接回车用默认路径 ~/.ssh/id_rsa
- 密码短语(passphrase)——建议设置,给私钥再加一层保护;不设也可以,登录更方便
- 确认密码短语——再输一遍
生成完成后,~/.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
每个服务器都会独立验证,互不影响。
常见问题排查
密钥登录失败怎么办
排查清单,按顺序检查:
- 权限——~/.ssh 700,authorized_keys 600,这是最常见的坑
- authorized_keys内容——确认公钥确实写入了,没被截断或多了换行
- sshd_config——PubkeyAuthentication必须是yes
- 私钥路径——默认~/.ssh/id_rsa,如果你改了位置需要ssh -i指定
- 用户目录权限——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辅助作者原创,未经许可,转载请保留原文链接。

发表评论