能免密登录必须同时满足三个硬性条件:本地有私钥、远程有对应公钥、服务端允许密钥认证;缺一不可,否则SSH会静默回落密码登录或直接拒绝。

能免密,但必须满足三个硬性条件:本地有私钥、远程有对应公钥、服务端允许密钥认证。缺一不可,否则 ssh 会静默回落到密码登录甚至直接拒绝。
ssh-keygen 生成密钥对时别跳过 -C 和权限检查
执行 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 是标准做法,但很多人忽略两点:
- -C 参数不是可选装饰,它是公钥末尾的标识字符串,用于区分多套密钥(比如工作/个人/CI),排查时靠它快速定位是哪组密钥在生效
- 生成后立刻检查
~/.ssh/id_rsa权限是否为600:执行ls -l ~/.ssh/id_rsa,如果不是,马上chmod 600 ~/.ssh/id_rsa;OpenSSH 严格校验私钥权限,哪怕多一个4(即变成644)都会拒绝加载 - 公钥
id_rsa.pub可读即可,但别误删或覆盖——它只用于分发,不参与本地认证
ssh-copy-id 失败时优先查远程 ~/.ssh 目录权限
ssh-copy-id 报错 “Permission denied (publickey)” 或 “No such file or directory” 很常见,根本原因往往不是网络或用户错,而是远程 ~/.ssh 目录权限不对:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 远程执行
ls -ld ~/.ssh,输出必须是drwx------(即700)。如果显示drwxr-xr-x(755),运行chmod 700 ~/.ssh - 若
~/.ssh/authorized_keys不存在,ssh-copy-id会自动创建,但前提是~/.ssh目录存在且权限正确;否则它连写入都失败 - 别用
root用户跑ssh-copy-id往普通用户家目录写——目标路径是/home/username/.ssh,而root执行时当前 $HOME 是/root,容易写错位置
跨用户或跨主机免密时必须确认 SSH 守护进程配置
即使公钥已正确写入 authorized_keys,仍提示密码输入,大概率是服务端 /etc/ssh/sshd_config 没生效:
- 确认这三行未被注释且值为 yes:
PubkeyAuthentication yes、AuthorizedKeysFile .ssh/authorized_keys、StrictModes yes -
StrictModes yes是关键:它强制检查~/.ssh和authorized_keys的所有权与权限。如果远程用户家目录属于 root 或权限是755,SSH 会直接忽略该用户的密钥认证 - 改完配置必须重启服务:
sudo systemctl restart sshd(CentOS/RHEL)或sudo systemctl restart ssh(Ubuntu/Debian);仅 reload 不够,部分旧版本需完整 restart - 别漏掉 SELinux:若启用了,
setsebool -P sshd_read_ssh_home on可放行 sshd 读取用户家目录下的.ssh
免密登录失败时最该先看的两行日志
本地 ssh -v user@host 输出太长,真正要盯住的是最后 10 行里的这两句:
- 如果看到
debug1: Authentications that can continue: publickey,password,说明服务端接收了公钥请求但校验失败——重点查远程authorized_keys内容是否粘贴完整、有没有多余空格、换行符是否为 LF(Windows 编辑器易存 CRLF) - 如果看到
debug1: No more authentication methods to try.后直接断开,说明服务端压根没启用密钥认证——回退查sshd_config和服务重启状态 - 别依赖客户端提示“Permission denied”,它掩盖了真实原因;服务端日志更准:
sudo tail -f /var/log/auth.log(Debian/Ubuntu)或sudo journalctl -u sshd -f(RHEL/CentOS)
真正卡住的地方,从来不是生成密钥那一步,而是权限链上某一处松动:本地私钥权限、远程目录权限、authorized_keys 文件权限、sshd 配置开关、SELinux 策略——五环相扣,断一环就全盘失效。

















