【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
相关推荐
Web3探索者1 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo1 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10153 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao3 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3105 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒6 天前
TShark:Wireshark CLI 功能
linux
A小辣椒7 天前
TShark:基础知识
linux
AlfredZhao7 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao7 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi