【linux】免密登录 一、免密登录涉及的文件SSH 的免密登录用的是数字签名客户端 服务端 (持有私钥) (持有公钥) │ │ │ 1. 请求登录 (ssh userserver) │ │ ─────────────────────────────────────→ │ │ │ │ 2. 服务端生成一个随机数 (challenge) │ │ ←───────────────────────────────────── │ │ │ │ 3. 客户端用私钥对随机数进行签名 │ │ (sign with private key) │ │ │ │ 4. 发送签名结果 │ │ ─────────────────────────────────────→ │ │ │ │ 5. 用公钥验证签名 │ (verify with public key) │ 如果验证通过 → 认证成功 │ │ │ 6. 认证结果 │ │ ←───────────────────────────────────── │假如A机器访问B机器则A需要持有私钥B需要有公钥这里的公钥id_rsa.pub和私钥id_rsa是一对假如A的用户是root 那么 /root/.ssh/下需要存在私钥名称是id_rsa只有一个B的用户是ubuntu那么 /home/ubuntu/.ssh下需要有公钥名称是authorized_keys 内容是多个id_rsa.pub因为C用户可以访问B也可以存在C的某个用户私钥对应的公钥二、权限问题2.1 文件或目录权限问题SSH 服务对密钥文件和目录的权限有极其严格的要求这是安全设计的一部分。任何权限过宽的设置都会导致免密登录失败即使密钥内容完全正确。客户端 (A机器) 权限要求~/.ssh/目录权限必须是700(仅所有者可读写执行)。~/.ssh/id_rsa(私钥)权限必须是600(仅所有者可读写)。这是最敏感的绝不能让其他用户读取。~/.ssh/id_rsa.pub(公钥)权限可以是644(所有者读写其他用户只读)因为公钥本身不敏感。服务端 (B机器) 权限要求~/.ssh/目录权限必须是700。~/.ssh/authorized_keys文件权限必须是600。如果权限是644或更开放SSH 服务会出于安全考虑拒绝读取该文件导致认证失败。用户家目录 (/home/ubuntu/)权限不应超过755。如果家目录权限是777SSH 服务同样会拒绝使用authorized_keys文件。常见错误与修复错误现象配置了公钥但登录时仍提示输入密码或直接报错Permission denied (publickey)。排查步骤检查服务端.ssh目录权限ls -ld ~/.ssh应为drwx------。检查服务端authorized_keys文件权限ls -l ~/.ssh/authorized_keys应为-rw-------。检查服务端家目录权限ls -ld ~应为drwxr-xr-x或更严格。修复命令chmod700~/.sshchmod600~/.ssh/authorized_keyschmod755~# 如果家目录权限过宽## 2.2 AllowUsers 机制AllowUsers 是白名单机制如果不配置默认对任何用户不限制 一旦配置了那么其他用户都受限 当免密失效仍报permisson deny时检查下 /etc/ssh/sshd_config 配置 日志分析若用户无法登录可通过查看认证日志如 /var/log/auth.log 或 /var/log/secure定位原因。典型的拒绝日志为User xxx not allowed because not listedinAllowUsers