ssh私钥文件必须设为600权限,否则openssh会强制拒绝加载并报错“permissions are too open”;600表示仅所有者可读写(rw-------),彻底阻断组和其他用户访问,防止密钥被同服务器其他账户读取滥用,公钥文件(.pub)则应设为644。

SSH私钥文件必须设为600权限,否则OpenSSH会直接拒绝加载并报错“Permissions are too open”,这不是提示而是强制拦截。权限宽松等于把密钥暴露在服务器上,其他用户可能读取甚至复制使用。
为什么非得是600?
600表示仅文件所有者可读写(rw-------),彻底阻断组内用户和其他人访问。一旦出现644、755等权限,私钥就可能被同服务器上的其他账户读取——相当于把门钥匙放在公共走廊里。
- 600是OpenSSH硬性校验项,不是建议值
- 哪怕只是多一个“组可读”(即640),也会触发拒绝
- 公钥文件(.pub)不受此限,644即可
怎么正确设置600权限
用chmod命令直接修正,注意路径要完整、避免sudo误改归属:
- chmod 600 ~/.ssh/id_ed25519(推荐Ed25519密钥)
- chmod 600 ~/.ssh/id_rsa(传统RSA密钥)
- chmod 700 ~/.ssh(目录也必须收紧,否则SSH跳过整个目录)
- 不要用sudo chmod,否则所有者可能变成root,你自己的账号反而打不开
连带要检查的关键权限
单改私钥不够,整条信任链都要合规:
- ~/.ssh/authorized_keys 必须是600,防止他人追加恶意公钥
- 主目录(如/home/username)不能有组或其他人写权限(即不能是775、777)
- 若用自定义密钥路径(如~/keys/deploy_key),同样执行chmod 600
怎么确认已生效
执行命令查看实际权限,输出开头应为-rw-------:
- ls -l ~/.ssh/id_ed25519
- ls -ld ~/.ssh
- ls -l ~/.ssh/authorized_keys











