【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
相关推荐
bosins6 小时前
WSL2 启动即崩溃?调整超时参数解决 Docker 阻塞问题
linux·docker·wsl
web守墓人7 小时前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
kuroomi7 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
daemon.qiang7 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
2401_869769599 小时前
linux 权限 指令与权限(重启之后)
linux
码农客栈9 小时前
Linux CAN 驱动
linux·驱动开发
GeW11 小时前
红帽RHCE从挂科边缘到一次过,我做对了什么
linux
时空自由民.11 小时前
WSL解决USB 串口连接问题与linux串口权限问题
linux·单片机
OpenPomeloxCommunity11 小时前
Linux驱动基础(三):firmware的声明与加载
linux·操作系统
云计算练习生11 小时前
什么是系统调用?为什么程序访问硬件必须经过它
linux·windows·操作系统·系统调用·操作系统原理