直接修改私钥文件权限为 600,这是 SSH 客户端的安全强制要求,适用于本地存储私钥的所有场景。
先说结论:私钥文件权限过于开放会导致 SSH 拒绝加载,必须 restrict 为仅所有者可读写。
- 先确认:报错指向的具体私钥文件路径是否正确
- 先处理:使用 chmod 命令将权限调整为 600
- 再验证:重新执行 SSH 连接命令观察是否不再提示权限错误
典型报错日志
遇到该问题时,终端通常会输出以下警告信息,确认路径和权限值是否与你的情况一致:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/user/.ssh/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 "/home/user/.ssh/id_rsa": bad permissions命令速用版
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh如果不确定文件名,先用 ls -l ~/.ssh/ 查看。
为什么会这样
SSH 协议设计时考虑了私钥的安全性。如果私钥文件对其他用户可读(例如 644 权限意味着同组和其他用户可读),一旦服务器或本地机器被入侵,攻击者可能窃取私钥冒充身份。因此,OpenSSH 客户端在加载私钥前会检查文件权限,发现过于开放则直接报错并忽略该密钥。
分步处理
1. 找到报错中提到的密钥文件路径。通常位于用户主目录的 .ssh 文件夹下,例如 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519。
2. 检查当前权限。执行 ls -l ~/.ssh/id_rsa,查看第一列权限位。
3. 修改权限。执行 chmod 600 ~/.ssh/id_rsa。这表示仅文件所有者可读写,其他人无任何权限。
4. 检查目录权限。有时目录权限过大也会报错,执行 chmod 700 ~/.ssh 确保目录仅所有者可进入。
5. 确认所有者。确保文件属于当前用户,如有必要使用 chown 命令修正。
怎么验证是否生效
使用详细模式重新连接:ssh -v user@host。观察输出日志,如果不再出现 "Permissions 0644 are too open" 警告,且进入密码输入或密钥认证环节,说明修复成功。
常见坑
1. 改错了文件:不要对公钥(.pub 结尾)执行严格权限限制,虽然通常无害,但重点是私钥。
2. 所有权不对:如果文件属于 root 而当前用户是普通用户,即使权限是 600 也可能无法读取,需检查 chown。
3. Windows 客户端:在 Windows 上使用 PowerShell 时,chmod 可能无效。需使用 icacls 重置权限,例如:
icacls C:\Users\Username\.ssh\id_rsa /inheritance:r /grant Username:F4. SELinux 上下文:极少数情况下,SELinux 标签错误也会阻止访问,但通常先解决基础权限问题。