IDEA 连接远程服务器 SSH 时报错“密钥权限过高”,通常是本地私钥文件权限设置过宽导致的。SSH 客户端出于安全机制会拦截此类密钥,修改本地密钥文件权限为仅所有者可读即可解决。
先说结论:这是本地 SSH 客户端的安全机制拦截,并非服务器拒绝,调整本地文件权限就能恢复。
- 先确认:找到 IDEA 配置中使用的私钥文件在本地磁盘的具体路径。
- 先处理:Linux/macOS 使用 chmod 600;Windows 原生使用 icacls 命令移除继承并授权当前用户。
- 再验证:重新在 IDEA 中测试 SSH 连接,观察报错是否消失。
命令速用版
假设你的私钥文件路径是 ~/.ssh/id_rsa (Linux/macOS) 或 C:\Users\YourName\.ssh\id_rsa (Windows)。
Linux/macOS 终端:
chmod 600 ~/.ssh/id_rsa
Windows PowerShell/CMD:
icacls "C:\完整\路径\to\key" /inheritance:r /grant "%USERNAME%:R"
为什么会这样
SSH 协议规定私钥文件必须严格保密。如果其他用户(组用户或世界用户)有读取或写入权限,SSH 客户端会认为密钥已泄露,拒绝使用它进行认证。IDEA 内置的 SSH 实现遵循这一标准,当检测到权限过高(例如 644 或 755)时,会抛出权限过高警告并中断连接。
分步处理
- 定位密钥文件:打开 IDEA,进入
Settings>Build, Execution, Deployment>Deployment或Tools>SSH Configurations,查看配置的 Key file 路径。 - 修改权限(Linux/macOS):打开终端,执行
chmod 600 /完整/路径/to/key。 - 修改权限(Windows 原生):以管理员身份打开 PowerShell 或 CMD,执行
icacls命令移除继承权限并仅授予当前用户读取权(详见下文命令行修复方案)。 - 重启连接:在 IDEA 的 SSH 配置页面点击 Test Connection。
Windows 原生环境命令行修复方案
Windows 文件系统权限机制与 Linux 不同,图形界面操作复杂且容易遗漏系统权限,导致 SSH 仍报错。推荐使用命令行精确控制。
步骤:
- 找到私钥文件的完整路径,例如
D:\keys\my_server_key。 - 打开 PowerShell 或 CMD(建议右键以管理员身份运行)。
- 执行以下命令(替换路径为实际路径):
icacls "D:\keys\my_server_key" /inheritance:r /grant "%USERNAME%:R"
命令解释:
/inheritance:r:禁用继承并移除所有继承的权限。/grant "%USERNAME%:R":仅授予当前登录用户读取权限(R)。
执行成功后会显示“成功处理了 1 个文件”。
怎么验证是否生效
点击测试连接后,IDEA 底部状态栏或弹窗不再显示 Permissions too open 或 UNPROTECTED PRIVATE KEY FILE 字样,且能成功列出远程目录或建立会话。
常见坑
- WSL 文件系统:如果密钥放在 Windows 盘符挂载到 WSL 的目录中,chmod 可能不生效,建议将密钥存放在 WSL 原生文件系统(如
~/)中。 - 复制粘贴导致权限重置:从别处复制密钥文件到新位置时,系统可能会赋予默认权限(如 644),每次复制后需重新检查权限。
- IDEA 缓存:极少数情况下,修改权限后 IDEA 仍报错,尝试重启 IDEA 清除内部 SSH 缓存。
- Windows 路径空格:如果文件路径包含空格,在使用 icacls 命令时必须用双引号包裹路径。
原文链接:https://www.zjcp.cc/ask/11661.html
