首页 / 新闻资讯 / 技术教程

SSH 免密登录配置:ssh-keygen 与 authorized_keys

2026-10-10分类:技术教程顺云运营

## 适用场景

每次登录都要输密码,既慢也让自动化脚本难写。配好密钥后登录免密,部署脚本、定时任务、rsync 与 git 拉取全部畅通,之后把密码登录一并关闭,还能挡掉绝大部分针对 22 端口的爆破尝试。凡是需要长期维护服务器的场景,这一步都值得最先做,五分钟换来的是日常操作与安全性的双提升。

## 完整步骤

本机生成密钥对,优先选更现代的 ed25519 算法,密钥短、速度快、安全性不输老算法:

bash
ssh-keygen -t ed25519 -C "deploy@workstation"

一路回车即可,若担心私钥被本机其他程序读取,可设置口令并用 ssh-agent 缓存,输一次口令后当次会话内免输。然后把公钥分发到服务器:

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-host

手动方式等价于把公钥内容追加到服务器上对应用户的 ~/.ssh/authorized_keys 文件末尾,一行一个公钥。成败的关键在权限:.ssh 目录必须是 700,authorized_keys 必须是 600,属主必须是登录用户本人;权限过宽时 sshd 会直接拒绝这套密钥,这也是"明明配了还向我要密码"的头号原因。个别发行版上 SELinux 上下文不对也会导致同样现象,用 restorecon 修复即可。

## 验证与失效排查

ssh user@server-host 不再索要密码即成功。若仍提示输密码,用 ssh -v 看详细过程,关注认证阶段尝试了哪些公钥、服务端是否拒绝;服务端一侧查 /var/log/secure 或 auth.log 里的具体拒绝理由。权限、属主、家目录本身是否被设成全员可写,这三项挨个核对,家目录过宽同样会触发严格检查。确认免密稳定后,再把 sshd_config 里 PasswordAuthentication 设为 no,reload 之前保留一个已登录会话作为回退通道,防止把自己锁在门外。

## 注意事项

私钥永远不离开本机,多台服务器共用时分发的是公钥而不是私钥文件。同事离职或更换电脑时,记得删掉 authorized_keys 里对应的行,密钥体系下回收权限只删一行,比改密码省事且彻底。在顺云上同时管多台云服务器时,按人员一人一把密钥并加好备注,出了问题能精确追溯到人;批量初始化新机器时把公钥带上,标准化的第一步就从免密开始。

技术教程