【linux】免密登录

一、免密登录涉及的文件

SSH 的免密登录用的是数字签名:

text 复制代码
客户端                                    服务端
(持有私钥)                                (持有公钥)
   │                                          │
   │  1. 请求登录 (ssh user@server)           │
   │ ─────────────────────────────────────→  │
   │                                          │
   │  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。如果家目录权限是 777,SSH 服务同样会拒绝使用 authorized_keys 文件。

常见错误与修复

错误现象

配置了公钥,但登录时仍提示输入密码,或直接报错 Permission denied (publickey)

排查步骤
  1. 检查服务端 .ssh 目录权限ls -ld ~/.ssh,应为 drwx------
  2. 检查服务端 authorized_keys 文件权限ls -l ~/.ssh/authorized_keys,应为 -rw-------
  3. 检查服务端家目录权限ls -ld ~,应为 drwxr-xr-x 或更严格。
修复命令
bash 复制代码
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 755 ~ # 如果家目录权限过宽

## 2.2 AllowUsers 机制
AllowUsers 是白名单机制,如果不配置,默认对任何用户不限制;
一旦配置了,那么其他用户都受限

当免密失效,仍报permisson  deny时,检查下
/etc/ssh/sshd_config 配置

日志分析:若用户无法登录,可通过查看认证日志(如 /var/log/auth.log 或 /var/log/secure)定位原因。典型的拒绝日志为:User xxx not allowed because not listed in AllowUsers
相关推荐
minglie11 小时前
zynq的linux驱动版终端AtShellDrv
linux
欧神附体1233 小时前
在虚拟机搭建本地仓库和网络仓库
linux·运维·服务器
是个西兰花4 小时前
Linux:深入解析Linux线程原理与实现
linux·运维·c++·线程·互斥锁
运维大师4 小时前
【Linux运维极简教程】07-磁盘管理与LVM
linux·运维·服务器
乖巧的妹子4 小时前
刷题总结知识
linux·服务器·windows
拳里剑气5 小时前
Linux:基础IO
linux·运维·服务器·io
小小龙学IT6 小时前
Day 2-3:Linux 文件与目录操作
linux
三8446 小时前
基本Linux命令总结
linux·运维·服务器
hehelm7 小时前
AI 大模型接入 SDK —项目概述
linux·服务器·网络·数据库·c++
mounter6257 小时前
跨越鸿沟:从内核驱动开发到超大规模云端生产环境的思考
linux·驱动开发·linux kernel·kernel