SSH 免密登录配置详解:ssh-keygen 从入门到排错

举报
yd_264475214 发表于 2026/11/03 00:57:33 2026/11/03
【摘要】 只需 5 分钟配置一次 SSH 免密登录:本文讲清非对称加密原理、ssh-keygen + ssh-copy-id 三步配置、config 别名管理多台服务器,以及权限不足、SELinux 等常见报错的排查方法,最后给出私钥 passphrase 与关闭密码登录的加固建议。

每次登录服务器都要输一遍密码?写个自动化脚本还要在代码里塞密码?其实只需要 5 分钟配置一次 SSH 免密登录,之后所有登录、scp 传文件、git 推拉代码都能一劳永逸。本文从原理讲到排错,把最常见的坑一次说清。

一、原理:为什么能免密

SSH 免密登录基于非对称加密:你在本机生成一对密钥(私钥 + 公钥),把公钥放到服务器上。登录时服务器用公钥发起一个数学挑战,只有持有私钥的客户端才能正确应答,整个过程不传输私钥,也没有密码参与。

对应关系:私钥留在本机(~/.ssh/id_ed25519),公钥追加到服务器的 ~/.ssh/authorized_keys 文件中。

二、三步完成配置

1. 在本机生成密钥对

ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车即可。相比老的 RSA,ed25519 密钥更短、更安全、生成更快。如果服务器较老不支持 ed25519,再用 rsa -b 4096。

2. 把公钥传到服务器

ssh-copy-id user@server_ip

这条命令本质上就是把 ~/.ssh/id_ed25519.pub 的内容追加到服务器的 ~/.ssh/authorized_keys,并自动修正权限。Windows 下没有 ssh-copy-id,可以用 PowerShell 一行代替:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 验证

ssh user@server_ip

不再提示输入密码即配置成功。

三、进阶:用 config 管理多台服务器

服务器多了以后,编辑 ~/.ssh/config(Windows 在 C:\Users\用户名\.ssh\config)给每台服务器起别名:

Host dev
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host prod
    HostName 10.0.0.8
    User root
    IdentityFile ~/.ssh/id_prod

之后直接 ssh dev、scp ./a.log prod:/tmp/ 即可,端口、用户、密钥全自动带上,git 的远程地址也可以写成 git@dev:repo.git。

四、常见报错排查

1. 配置后仍提示输密码:九成是权限问题。SSH 对权限要求严格,在服务器上执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

家目录本身也不能是 777,否则 sshd 会拒绝读取 authorized_keys。

2. Permission denied (publickey):在客户端加 -v 看详细日志:ssh -v user@server_ip,重点看 Offering public key 和 Server accepts key 两行,确认尝试的密钥文件是否正确。

3. 刚改过服务器 sshd 配置:修改 /etc/ssh/sshd_config 后记得 systemctl restart sshd,并确认 PubkeyAuthentication yes 和 AuthorizedKeysFile %h/.ssh/authorized_keys 两项没有被注释。

4. SELinux 造成的失败(CentOS 常见):执行 restorecon -Rv ~/.ssh 修正安全上下文。

五、小结

免密登录不只是省去输密码:它比密码更安全(密钥无法被暴力破解)、更适合自动化(脚本和 CI 不需要嵌入密码)。建议顺手做好两件事:给私钥设置 passphrase(ssh-keygen -p),以及在服务器上关闭密码登录(PasswordAuthentication no),安全性再上一个台阶。

如果在华为云 ECS 上配置,注意在安全组中放行 22 端口,并使用弹性公网 IP 连接。遇到问题欢迎评论区交流。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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