SSH 免密登录三步配置实战:ssh-keygen、ssh-copy-id 与 config 别名
日常开发和运维中,我们几乎每天都要 SSH 登录服务器。每次手动输密码不仅繁琐,在脚本和自动化场景里更是行不通。SSH 免密登录基于非对称加密:本地持有私钥,服务器保存公钥,认证全程不传密码,既省事也更安全。下面用三步完成配置,并附上三个最常见的坑。
第一步:本地生成密钥对
ssh-keygen -t ed25519 -C "work-laptop"
一路回车即可。优先选 ed25519 算法,密钥更短、安全性更高;特别老的系统可以退回 rsa。生成结果在 ~/.ssh/ 目录下:id_ed25519 是私钥,绝不能外泄;id_ed25519.pub 是公钥,可以放心分发。
第二步:把公钥放到服务器
最方便的是用 ssh-copy-id,一条命令搞定:
ssh-copy-id user@192.168.1.100
它会把公钥追加到服务器的 ~/.ssh/authorized_keys。如果服务器是精简系统没有这个工具,手动做也一样:
cat ~/.ssh/id_ed25519.pub | ssh user@192.168.1.100 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
第三步:配置别名,一条命令直达
编辑本地 ~/.ssh/config:
Host myserver
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
以后只需要 ssh myserver,端口、用户名、密钥全部自动带上。scp、rsync、git remote 也都能直接用这个别名,比如 scp app.tar.gz myserver:/opt/。
三个常见的坑
1. 权限不对导致免密失效。 服务器上 ~/.ssh 必须 700,authorized_keys 必须 600,home 目录不能是 777。排查命令:ls -ld ~ ~/.ssh ~/.ssh/authorized_keys。权限一宽,sshd 会直接拒绝使用公钥。
2. 本地私钥权限过宽。 连接时报 “UNPROTECTED PRIVATE KEY” 警告,执行 chmod 600 ~/.ssh/id_ed25519 即可。
3. 连不上时先开调试。 用 ssh -v myserver 看详细日志,能清楚看到卡在哪一步:公钥被拒、密钥不匹配,还是网络不通,比反复盲试高效得多。
小结
ssh-keygen 生成密钥、ssh-copy-id 分发公钥、config 写别名,三步完成免密登录。配合 scp、rsync 和各类 CI 脚本,服务器操作效率会有明显提升。如果团队规模较大,还可以进一步统一管理 authorized_keys,或者引入证书登录(CA 签发),后续有机会再展开。
- 点赞
- 收藏
- 关注作者
评论(0)