SSH 免密登录一次讲明白:密钥对、authorized_keys 与三个常见坑
每次登录云服务器都要输密码?学会免密登录,ssh 一下直接进。原理很简单:你本地有一把私钥,服务器上放着对应的公钥,两边一对上就不用密码了。
1. 生成密钥对:ssh-keygen
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车即可。生成后得到两个文件:~/.ssh/id_ed25519(私钥,绝不外传)和 ~/.ssh/id_ed25519.pub(公钥,可以公开)。-t ed25519 是目前推荐的算法,又短又快;老教程里的 rsa 也能用,但没必要了。
坑点:如果你之前已经生成过密钥,直接回车会提示覆盖。先 ls ~/.ssh 看看,别手滑把正在用的私钥覆盖掉——覆盖了就再也登不上配过它的服务器了。
2. 把公钥装到服务器
最省事的方法是 ssh-copy-id,它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
输入一次密码,之后这台服务器就免密了。如果服务器上没有 ssh-copy-id(比如某些精简系统),手动做也一样:
# 本地:复制公钥内容
cat ~/.ssh/id_ed25519.pub
# 服务器上:追加到 authorized_keys(注意是 >> 追加,不是 > 覆盖)
echo "公钥内容" >> ~/.ssh/authorized_keys
3. 权限不对是免密失败的头号原因
配完还是要输密码?九成是权限问题。SSH 对这几个路径的权限非常挑剔:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
~/.ssh 目录必须是 700(只有自己能进),authorized_keys 必须是 600(只有自己能读写)。权限太松(比如 777),sshd 会直接拒绝使用密钥,宁可让你输密码——这是安全设计,不是 bug。
4. 进阶:用 config 给服务器起别名
服务器多了记不住 IP?写个 ~/.ssh/config:
Host myserver
HostName 123.45.67.89
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
以后 ssh myserver 就行,还能给每台服务器指定不同的密钥和用户。
结语
免密登录的链条很短:生成密钥对 → 公钥上服务器 → 权限收紧 → 可选 config 别名。出问题先查权限,再查 authorized_keys 里是不是多了一行空格或换行。你第一次配免密登录踩过什么坑?评论区聊聊。
- 点赞
- 收藏
- 关注作者
评论(0)