【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
相关推荐
空堂与归1 天前
Linux 命令实战:AI 开发者必备的终端操作手册
linux
牢姐与蒯1 天前
Linux基本指令及知识点(二)
linux·运维·服务器
小玮看世界1 天前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
RisunJan1 天前
Linux命令-spell(Unix 拼写检查工具 —— 文本校对的基础利器)
linux·运维·unix
BLi4ee1 天前
WSL 文件资源管理器左侧 Linux / Ubuntu 入口恢复
linux·ubuntu
BLUcoding1 天前
Ubuntu 开机自启 Kiosk 模式浏览器全屏展示网页配置指南
linux·运维·ubuntu
Kina_C1 天前
Keepalived 配置管理进阶:使用子配置文件实现模块化与高可读性
linux·网络·keepalived
wsad05321 天前
CentOS Stream 10 配置静态 IP 完整指南
linux·tcp/ip·centos
Ai拆代码的曹操1 天前
K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
linux·docker·kubernetes
tedcloud1231 天前
Kimi-K3 部署指南:大模型应用开发环境搭建实践
linux·运维·服务器·开源·音视频