从Linux Docker容器PowerShell远程连接Windows Server 2019/2022报错求助
针对WSMan Negotiate认证报错MI_RESULT_ACCESS_DENIED的解决方案
- 调整用户名格式:非域环境下认证必须带上目标主机名作为前缀,构造凭证时用户名写为
server2019\Admin,不要仅输入Admin,避免PowerShell默认使用本地/域用户逻辑校验导致认证失败。 - 同步容器与目标主机时间:NTLM认证对时间差敏感度要求小于5分钟,可在启动容器时添加参数
-v /etc/localtime:/etc/localtime:ro同步宿主机时间,避免时间差导致的认证拒绝。 - 确认目标主机WinRM配置:在Windows目标主机执行以下命令开启对应配置(测试环境用,生产环境建议配置SSL加密):
# 开启Negotiate认证 winrm set winrm/config/service/auth @{Negotiate="true"} # 允许非加密流量传输(未配SSL时必须开启) winrm set winrm/config/service @{AllowUnencrypted="true"}
- 验证端口连通性:在容器内执行
nc -zv server2019 5985确认WinRM默认HTTP端口可达,避免端口拦截导致的连接异常。
针对SSH通道报错subsystem request failed on channel 0的解决方案
该报错核心原因是Windows目标主机的SSH服务未正确配置PowerShell子系统,和容器本身SSH配置无关:
- 打开Windows目标主机的SSH配置文件:默认路径为
C:\ProgramData\ssh\sshd_config - 添加或修改PowerShell子系统配置,路径需匹配你Windows上PowerShell 7的实际安装路径,示例如下:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfile
- 保存配置后重启Windows端SSH服务:执行
Restart-Service sshd生效 - 验证配置:在容器内执行
ssh admin@server2019 pwsh,如果能直接进入PowerShell交互界面,说明子系统配置正常,再执行Enter-PSSession命令即可正常连接。
内容的提问来源于stack exchange,提问作者KeithMac
相关产品推荐
相关产品推荐

