pywinrm连接可RDP访问的Windows主机时报WinError 10061被拒求助
WinRM连接报错排查方案
报错原因
WinError 10061为目标主机主动拒绝连接,本质是目标Windows主机的WinRM服务未配置、对应端口未开放导致。RDP远程桌面走3389端口,和WinRM服务使用的5985(HTTP)、5986(HTTPS)端口完全独立,因此RDP可访问不代表WinRM可用。
具体排查步骤
- 目标主机配置WinRM服务
登录目标Windows主机,以管理员身份运行PowerShell,依次执行以下命令完成WinRM配置:# 启用WinRM远程管理服务 Enable-PSRemoting -Force # 配置HTTPS类型的WinRM监听,对应5986端口 winrm quickconfig -transport:https -Force # 添加入站防火墙规则,开放5986端口 New-NetFirewallRule -Name "WinRM_HTTPS_In" -DisplayName "WinRM HTTPS 入站" -Direction Inbound -Protocol TCP -LocalPort 5986 -Action Allow -Enabled True # 开启NTLM认证支持,和代码中的transport参数匹配 winrm set winrm/config/service/auth '@{NTLM="true"}' # 测试阶段可配置信任所有主机,避免拦截 winrm set winrm/config/client '@{TrustedHosts="*"}' - 验证端口连通性
在运行Python代码的设备上,执行以下命令验证5986端口连通性:
返回结果中# PowerShell环境执行 Test-NetConnection 10.XX.XX.XX -Port 5986TcpTestSucceeded为True说明端口连通正常,否则需要检查目标主机防火墙、网络ACL策略是否放行5986端口。 - 代码适配调整
可以在连接地址中明确指定协议与端口,避免默认配置出错:
如果不需要HTTPS加密,也可以改用HTTP协议的5985端口,地址改为import winrm # HTTPS协议使用如下地址格式 session = winrm.Session('https://10.XX.XX.XX:5986/wsman', auth=('admin','xxxxxx'), transport='ntlm', server_cert_validation='ignore') is_shell=True while is_shell: is_dir_get_or_create = session.run_cmd(r'if exist "C:\Temp\" (echo yes) else (echo no && mkdir C:\Temp)') # 可输出执行结果排查命令执行问题 print("命令输出:", is_dir_get_or_create.std_out.decode('gbk')) print("错误输出:", is_dir_get_or_create.std_err.decode('gbk')) is_shell=Falsehttp://10.XX.XX.XX:5985/wsman即可。
内容的提问来源于stack exchange,提问作者Rajarshi Das
相关产品推荐
相关产品推荐

