元数据
| id | ssh-key-permissions | 收录 | 2026-08-29 |
|---|---|---|---|
| 问题域 | 编码代理与终端 | 主题分组 | 权限与安全 |
| 适用工具 | ssh · 外部工具 | ||
症状
用 `ssh -i 私钥` 登录时整屏警告:
```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/path/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/path/id_rsa": bad permissions
root@host: Permission denied (publickey,keyboard-interactive).
```
特征:密钥文件本身没问题,是**文件权限**被 ssh 拒绝(组/其他人可读就报);
常见于从压缩包/网盘拷来的密钥、Windows 工具生成的密钥(azure-cli-extensions#6408 就是工具生成 0644 密钥)、
或 WSL 里挂载 Windows 盘的密钥(chmod 无效)。
原因
OpenSSH 客户端加载私钥时强制要求:私钥不能被其他用户/组读取(必须是 600/700 级别)。
一旦 group/other 有读权限(644/640/664 等),直接忽略该密钥并拒绝用其认证——这是防私钥泄露的安全设计,不是故障。
注意:该检查在**认证阶段**才触发(需要先建立 TCP 连接),所以连不上服务器时看不到这个警告。
解法
1. **改权限(Linux/macOS/WSL)**:`chmod 600 ~/.ssh/id_ed25519`(私钥),`chmod 644` 公钥、`chmod 700 ~/.ssh`;
2. **Windows 原生 OpenSSH**:chmod 不适用,用 `icacls "私钥路径" /inheritance:r /grant:r "%USERNAME%:R"`;
3. **WSL 访问 /mnt/c 上的密钥**:drvfs 不支持 chmod(chmod 看着生效实际无效),
正确做法把密钥复制到 WSL 内(`cp` + `chmod 600`)或用 icacls 在 Windows 侧修;
4. **工具生成的临时密钥**(az bastion ssh / 各类 CLI 的 /tmp 密钥):先 chmod 600 再用,或反馈工具修复(#6408 场景);
5. 检查父目录:`~/.ssh` 目录本身别 777(`chmod 700 ~/.ssh`);
6. 批量修复:`chmod 600 ~/.ssh/*` 会误伤公钥(公钥 644 无妨,600 也行),精确一点只改无 .pub 的文件。
验证证据
- 本地实测(2026-08-29,WSL Ubuntu,OpenSSH 10.2p1,本机临时 sshd 端口 2222):
- 环境:apt 装 openssh-server,临时 sshd(127.0.0.1:2222、PermitRootLogin prohibit-password、PasswordAuthentication no),ed25519 密钥加入 authorized_keys;
- 基线:私钥 600 → 免密登录成功(exit 0);
- 复现 1:chmod 644 → `UNPROTECTED PRIVATE KEY FILE` + `Load key ... bad permissions` + `Permission denied`(exit 255);
- 复现 2:chmod 640(仅组可读)→ 同样警告(exit 255)——规则是「不可被他人读取」,不是只要 owner 可读写;
- 修复:chmod 600 → 免密登录恢复成功(exit 0);
- 补充:无 sshd 时(连接失败)该警告不出现——检查在认证阶段,需先能连上;
- 清理:测试 sshd 已杀、端口 2222 空闲、临时密钥与 authorized_keys 已删(本机原 id_ed25519 未动)。
- 实测复现日志(2026-08-29)
来源与证据
素材来源:https://github.com/Azure/azure-cli-extensions/issues/6408
验证证据:Evidence details kept locally (2026-08-29)