《SSH 免密登录总配不对?从密钥生成到 config 一次讲清》

举报
yd_275127495 发表于 2026/11/08 06:26:14 2026/11/08
【摘要】 每次登录服务器都要输一遍密码,输错一次还得重来;想写个自动备份脚本,第一步就被密码卡住。SSH 免密登录就是解决这个问题的标准做法,配一次,之后登录、传文件、跑脚本都不再输密码。本文把从生成密钥到排错的完整链路讲清,照着做十分钟就能配好。先理解原理,一句话就够:密钥登录用一对钥匙,公钥放在服务器上,私钥只留本机。登录时服务器用公钥出一道只有对应私钥能解的题,本机私钥解开,就算通过。私钥从不经...

每次登录服务器都要输一遍密码,输错一次还得重来;想写个自动备份脚本,第一步就被密码卡住。SSH 免密登录就是解决这个问题的标准做法,配一次,之后登录、传文件、跑脚本都不再输密码。本文把从生成密钥到排错的完整链路讲清,照着做十分钟就能配好。

先理解原理,一句话就够:密钥登录用一对钥匙,公钥放在服务器上,私钥只留本机。登录时服务器用公钥出一道只有对应私钥能解的题,本机私钥解开,就算通过。私钥从不经过网络,所以只要私钥不泄露,这套机制比密码更安全。很多人第一次配不好,不是命令记错,而是把公钥私钥放反了,或者权限没设对。

第一步,在本机生成密钥。打开终端执行:

ssh-keygen -t ed25519 -C "my-laptop-2026"

ed25519 是目前推荐的算法,又短又快;只有很老旧的系统才需要退回 rsa。命令会问保存位置,直接回车用默认的 ~/.ssh/id_ed25519 即可;接着问口令,设一个口令相当于给私钥再加一把锁,丢了私钥别人也用不了,但每次使用要输一次口令,可以配合 ssh-agent 只输一次。如果是无人值守的脚本机器,可以留空口令,但私钥文件本身一定要保管好。

第二步,把公钥传到服务器。最省事的是:

ssh-copy-id 用户名@服务器IP

它会自动把本机公钥追加到服务器的 ~/.ssh/authorized_keys,还会顺手把权限修好。如果服务器上没有 ssh-copy-id,就手动复制公钥内容,粘贴到服务器 ~/.ssh/authorized_keys 文件末尾,注意必须是完整的一行,中间不能断行、不能多空格。很多人复制时从网页或聊天窗口粘贴,换行符被吃掉,公钥变成两行,登录时就会静默失败。

第三步,检查权限,这是最常见的翻车点。SSH 服务端对权限非常挑剔,三处必须达标:~/.ssh 目录 700,authorized_keys 文件 600,家目录本身不能是组可写。修权限的命令:

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

如果权限不对,服务端出于安全考虑会直接拒绝密钥登录,而且客户端只会看到冷冰冰的 Permission denied,不告诉你真正原因。配完先别关当前窗口,新开一个终端试登录,能进去再关旧窗口,免得把自己锁在门外。

第四步,用 config 文件告别长命令。服务器一多,ssh -p 2222 -i ~/.ssh/id_sg 用户名@一串IP 根本记不住。在本机 ~/.ssh/config 里写:

Host sg
    HostName 188.239.17.92
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519

之后 ssh sg 就能登录。还有两台服务器要经过跳板机才能连,加一行 ProxyJump 跳板机别名 即可,跳板机同样在 config 里定义一次。config 文件本身权限建议 600,写错语法时 ssh -v 主机别名 会打印它到底读了哪几行配置。

第五步,排错三板斧。配完登不上去别慌,按顺序查:先在本机加 -v 看详细日志,ssh -v sg 会显示它尝试了哪些密钥、服务端接受了哪种认证方式;再看服务端日志,Debian/Ubuntu 在 /var/log/auth.log,里面会写明是权限问题还是密钥不匹配;最后确认服务端的 sshd 配置允许密钥登录,PubkeyAuthentication yes 是默认值,一般不用改。常见坑还有:把私钥内容贴到了 authorized_keys 里(应该贴 .pub 公钥)、authorized_keys 里混进了 Windows 换行符、家目录权限被改成 777。

最后说安全收尾。免密登录配好后,建议把密码登录关掉,改掉服务端 /etc/ssh/sshd_config 里的 PasswordAuthentication no,并禁止 root 直接登录 PermitRootLogin no,改完 sshd -t 检查语法再重启服务。这样暴力破解密码的路就被堵死了,攻击者即使扫到你的端口,没有私钥也进不来。密钥本身也要定期轮换,换了新密钥记得把旧公钥从各服务器的 authorized_keys 里删掉。

免密登录不是什么高深技术,它只是把“每次输密码”换成“一次配好密钥”。按生成密钥、传公钥、修权限、写 config、排错验证这五步走下来,大多数人的问题都出在第二步的断行和第三步的权限上。配通之后,登录、传文件、跑自动化脚本都会顺畅很多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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