要彻底禁用 Rhosts 鉴权,必须同时设置 IgnoreRhosts no、RhostsAuthentication no、RhostsRSAAuthentication no 和 HostbasedAuthentication no,并限定 Protocol 2、合理配置 PermitRootLogin 与 StrictModes,再通过 sshd -t 和重启验证。

要让 sshd_config 真正禁用过时的 Rhosts 鉴权机制,关键不是只设 IgnoreRhosts yes,而是必须**组合关闭所有依赖 Rhosts 的验证路径**。单独启用 IgnoreRhosts 仅影响部分行为,无法彻底废除。
IgnoreRhosts 的真实作用
它不直接“废除” Rhosts 鉴权,而是让 SSH 忽略用户主目录下的 .rhosts 和 .shosts 文件,以及系统级的 /etc/hosts.equiv 和 /etc/shosts.equiv —— 但前提是其他相关选项仍处于启用状态,这些文件仍可能被读取或参与判断。
必须同步禁用的配套选项
以下三项必须全部明确设置为 no,否则 Rhosts 类验证仍可能生效:
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
-
RhostsAuthentication no:禁用基于
.rhosts//etc/hosts.equiv的纯 Rhosts 认证(SSH-1 协议) - RhostsRSAAuthentication no:禁用结合 RSA 主机密钥的 Rhosts 认证(SSH-2 中已废弃,但默认可能开启)
-
HostbasedAuthentication no:禁用基于主机密钥和
known_hosts+shosts.equiv的主机级认证(常被误认为是 Rhosts 的现代变体)
还需确认协议与权限控制
避免旧协议绕过限制:
-
Protocol 2:确保注释掉或删除
Protocol 2,1,只保留Protocol 2。SSH-1 协议原生依赖 Rhosts,禁用后才能根除风险 - PermitRootLogin prohibit-password 或 no:防止 root 用户通过任何弱路径(包括遗留配置残留)登录
-
StrictModes yes:强制检查用户家目录及
.ssh权限,避免因权限宽松导致.rhosts被意外加载
验证是否真正生效
修改后务必执行两步验证:
- 运行
sshd -t检查语法无误 - 重启服务:
systemctl restart sshd(或service sshd restart) - 手动测试:在客户端尝试使用
ssh -o HostbasedAuthentication=yes user@host,应被拒绝;同时确认服务器上/var/log/secure中无Rhosts或hostbased相关成功日志

















