SSH 密钥免密登录:生成、配置与常见问题

举报
yd_248904582 发表于 2026/11/09 06:05:07 2026/11/09
【摘要】 SSH 密钥免密登录用密钥对代替密码:本文介绍 Ed25519 密钥的生成、公钥部署、客户端配置,以及仍提示密码、权限过松等常见问题的排查方法。

每天登录服务器都要输一遍密码,既繁琐又容易被暴力破解。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 看日志逐项排查,大多数情况都能快速解决。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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