【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
相关推荐
小小龙学IT几秒前
C++ std::chrono 时间库深度解析:从 duration 模板到 C++20 日历与时区
linux·c++·c++20
Doraemomo11 分钟前
Linux编程-epoll多路IO复用
linux·运维·服务器
kmomo..22 分钟前
Linux 进程学习笔记
linux·笔记·学习
Tanner_SL33 分钟前
Linux笔记之PATH, LD_LIBRARY_PATH和LIBRARY_PATH的区别
linux·运维·笔记
Mapleay1 小时前
Linux 内核调试
linux
从零开始的嵌入式之旅2 小时前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
秃秃秃秃哇2 小时前
orin上sensor一帧raw图大小的计算
linux
byte轻骑兵2 小时前
【BlueZ 】蓝牙配对/绑定基础:BlueZ 中安全机制的入门级源码解析
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
xx~t2 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
给AI剪纸的打工人2 小时前
OpenCode怎么接第三方API?自定义Provider与Responses配置实战
linux·数据库·人工智能