Windows间OpenSSH Host Based Authentication配置失败求助
Windows 到 Windows OpenSSH 主机基认证配置与排障
服务端(远程Windows主机)配置步骤
修改
sshd_config配置文件- 打开
C:\ProgramData\ssh\sshd_config,找到以下配置项并修改:
(HostbasedAuthentication yes HostbasedUsesNameFromPacketOnly yes PubkeyAuthentication yesHostbasedUsesNameFromPacketOnly yes跳过反向DNS解析,适配Windows环境下的主机名/IP直接匹配) - 保存文件后,重启OpenSSH服务:
Restart-Service sshd
- 打开
配置主机信任文件
- 在
C:\ProgramData\ssh目录下创建shosts.equiv文件,添加客户端主机名(或IP),例如:WIN-CLIENT-PC # 或使用IP 192.168.1.100 - 同样在
C:\ProgramData\ssh目录下创建known_hosts文件,添加客户端主机的公钥(公钥位于客户端的C:\Users\<用户名>\.ssh\id_rsa.pub),格式为:WIN-CLIENT-PC ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... - 修复文件权限(权限过松会被sshd忽略):
icacls "C:\ProgramData\ssh\shosts.equiv" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F" icacls "C:\ProgramData\ssh\known_hosts" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
- 在
客户端(本地Windows主机)配置步骤
生成主机密钥对(未生成时执行)
ssh-keygen -t rsa一路回车,密钥会生成在
C:\Users\<用户名>\.ssh\目录下。修改
ssh_config配置- 在
C:\Users\<用户名>\.ssh目录下创建config文件,添加:Host <远程主机名或IP> HostbasedAuthentication yes EnableSSHKeysign yes
- 在
确保
ssh-keysign可用- 确认
ssh-keysign.exe位于C:\Windows\System32\OpenSSH\目录下,且该路径已加入系统环境变量(默认已配置)。
- 确认
报错排障(针对Permission denied (publickey,keyboard-interactive,hostbased))
- 检查服务端
sshd_config是否生效:执行ssh -v <远程用户名>@<远程主机>查看verbose输出,确认hostbased认证被触发。 - 查看服务端OpenSSH日志:打开事件查看器→应用程序和服务日志→OpenSSH→Operational日志,日志会明确指出失败原因(如权限问题、主机名不匹配、公钥未找到等)。
- 验证文件权限:服务端的
shosts.equiv和known_hosts不能给普通用户写入权限,否则sshd会拒绝加载。 - 确认主机名一致性:客户端连接时使用的主机名/IP必须与服务端
shosts.equiv、known_hosts中的条目完全匹配。
内容的提问来源于stack exchange,提问作者azhar rahi
相关产品推荐
相关产品推荐

