SSH 免密登录一次讲明白:密钥对、authorized_keys 与三个常见坑

举报
yd_223785715 发表于 2026/10/25 13:33:58 2026/10/25
【摘要】 每次登录云服务器都要输密码?学会免密登录,ssh 一下直接进。原理很简单:你本地有一把私钥,服务器上放着对应的公钥,两边一对上就不用密码了。 1. 生成密钥对:ssh-keygenssh-keygen -t ed25519 -C "your_email@example.com"一路回车即可。生成后得到两个文件:~/.ssh/id_ed25519(私钥,绝不外传)和 ~/.ssh/id_ed2...

每次登录云服务器都要输密码?学会免密登录,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 里是不是多了一行空格或换行。你第一次配免密登录踩过什么坑?评论区聊聊。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。