SSH 密钥免密登录:生成、配置与常见问题
每天登录服务器都要输一遍密码,既繁琐又容易被暴力破解。SSH 密钥免密登录用一对密钥代替密码:私钥留在本地,公钥放到服务器,登录时双方自动完成身份验证,既方便又安全。本文介绍密钥的生成、配置方法以及最常见的几个问题。
一、为什么用密钥登录
密码登录的弱点很明显:弱口令会被字典攻击,强口令又难记、难轮换。密钥登录则不同:私钥通常有 256 位以上的强度,无法被猜测;服务器只保存公钥,即使公钥泄露也不会危及账户;配合禁用密码登录,还能直接挡住绝大多数自动化扫描和爆破。日常运维、自动化脚本、Git 远程操作都适合用密钥登录。
二、生成密钥对
在本地终端执行以下命令,推荐使用 Ed25519 算法,它兼顾安全与速度:
ssh-keygen -t ed25519 -C "your_email@example.com"
执行后按提示选择保存位置,默认是 ~/.ssh/id_ed25519。建议为私钥设置一个口令(passphrase),即使私钥文件不慎泄露,也多了一层保护。生成完成后会得到两个文件:id_ed25519 是私钥,绝不能外发;id_ed25519.pub 是公钥,可以公开。查看公钥内容:
cat ~/.ssh/id_ed25519.pub
如果服务器较旧、不支持 Ed25519,可以改用 RSA:ssh-keygen -t rsa -b 4096。
三、把公钥部署到服务器
最省事的方法是使用 ssh-copy-id,它会自动把公钥追加到服务器的 authorized_keys 文件中:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
第一次执行仍需输入密码,成功后再次登录就不再需要密码了。如果服务器没有 ssh-copy-id,也可以手动追加:
cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
权限是密钥登录能否成功的关键,务必检查:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
目录权限过松时,sshd 出于安全考虑会直接拒绝密钥登录。
四、客户端配置:指定密钥与别名
如果一台电脑上有多个密钥,可以在 ~/.ssh/config 中为每台服务器指定密钥和别名,省去每次输入 -i 参数:
Host myserver
HostName 123.123.123.123
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
配置完成后,直接执行 ssh myserver 即可登录。需要临时指定密钥时也可以这样写:
ssh -i ~/.ssh/id_ed25519 user@server_ip
给私钥设置了口令的同学,可以用 ssh-agent 托管,避免每次输入口令:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
五、常见问题
1. 仍提示输入密码。 先用详细模式定位原因:
ssh -vvv user@server_ip
输出中若出现 Permission denied (publickey),按顺序排查:~/.ssh 目录是否为 700、authorized_keys 是否为 600、公钥是否完整复制到了文件末尾、服务器端 sshd_config 中 PubkeyAuthentication 是否为 yes。
2. 提示私钥权限过松。 OpenSSH 会拒绝权限为 644 之类的私钥,执行 chmod 600 ~/.ssh/id_ed25519 即可。
3. 修改配置后仍可密码登录。 检查 /etc/ssh/sshd_config,确认以下配置后重启 sshd 服务:
PubkeyAuthentication yes
PasswordAuthentication no
systemctl restart sshd
注意:禁用密码登录前务必确认密钥登录已经可用,否则可能把自己锁在服务器外面。
4. 换电脑后密钥失效。 私钥只保存在生成它的那台电脑上,换电脑需要重新生成一对密钥并重新部署公钥,或者把私钥安全地迁移过去。更稳妥的做法是每台设备各用一对密钥,服务器上可以同时存放多个公钥,某个设备丢失时单独删除对应的公钥即可。
六、安全建议
一是私钥只存本地,绝不通过聊天工具、邮件或代码仓库传输;二是生产环境的密钥设置口令,并定期轮换;三是服务器关闭密码登录与 root 远程密码登录,只保留密钥登录;四是使用 ssh -T git@github.com 之类的方式定期验证 Git 托管平台的密钥是否仍然有效。
结语
SSH 密钥免密登录的配置只需几分钟,带来的却是每天登录的便利和长期的安全收益。按本文的步骤生成密钥、部署公钥、收紧权限,遇到问题时用 ssh -vvv 看日志逐项排查,大多数情况都能快速解决。
- 点赞
- 收藏
- 关注作者
评论(0)