SSH服务因权限过宽拒绝启动时,应先运行sudo sshd -t验证配置与权限;私钥文件必须为600,sshd_config推荐644;用find命令定位并修复权限后,须重新测试、重启并连接验证。

SSH 服务因权限过宽而拒绝启动或配置不生效,是 Linux 中非常典型又容易被忽略的问题。OpenSSH 对关键目录和文件的权限极其严格,一旦超出允许范围(比如 /etc/ssh 下的私钥或配置文件权限为 755 或 644),sshd 在启动或重载时会直接拒绝加载,但往往不报明确错误,只静默失败或提示模糊的 “Permission denied”。
确认是否是权限过宽引发的启动失败
不要依赖 systemctl status sshd 的表面状态——它可能显示 active,实则进程已异常退出。最可靠的方式是手动测试配置并查看详细报错:
- 运行
sudo sshd -t:这是验证/etc/ssh/sshd_config语法和关联文件权限的权威命令。若权限违规,会直接输出类似:Permissions for '/etc/ssh/ssh_host_rsa_key' are too open.It is required that your private key files are NOT accessible by others. - 若
sshd -t报错,说明不是配置语法问题,而是文件系统权限不合规,必须立即修复对应路径。
/etc/ssh 目录及密钥文件的标准权限要求
OpenSSH 要求所有私钥文件(ssh_host_*.key)和敏感配置文件(如 sshd_config)不能被组或其他用户读写。常见合规权限如下:
-
/etc/ssh目录本身:建议755(可接受),但内部文件权限才是关键 - 主机私钥文件(如
ssh_host_rsa_key,ssh_host_ecdsa_key等):必须为600(仅 root 可读写) -
sshd_config:推荐644(root 写,所有人读),但600也可接受;严禁666、755等开放权限 - 公钥文件(如
ssh_host_rsa_key.pub):可为644,无严格限制
快速定位并修复过宽权限
不用逐个检查,用一条命令发现所有风险项:
- 查找
/etc/ssh下权限过宽的私钥:find /etc/ssh -name "ssh_host*_key" -not -perm 600 -ls - 修复全部私钥:
sudo find /etc/ssh -name "ssh_host*_key" -exec chmod 600 {} \; - 检查
sshd_config权限是否意外为664或755:ls -l /etc/ssh/sshd_config,若不符,执行:sudo chmod 644 /etc/ssh/sshd_config
修复后务必验证并重启
权限改完不代表问题解决,必须闭环验证:
- 再次运行
sudo sshd -t,确认输出 “Config test succeeded” - 重启服务:
sudo systemctl restart sshd - 检查状态:
sudo systemctl status sshd,确认是 active (running),且没有 “Failed to start OpenSSH server daemon” 类日志 - 从另一终端尝试 SSH 连接,避免仅依赖本地 session


















