排查Paramiko连接Windows远程服务器WinError10060失败问题
排查Paramiko连接Windows服务器的[WinError 10060]问题
第一步:先确认基础网络连通性
- 在ServerA上执行
ping ServerB的IP/主机名,验证网络是否可达。如果ping不通,优先解决网络路由、子网互通问题。 - 测试SSH端口(默认22)是否开放:用PowerShell命令
Test-NetConnection ServerB_IP -Port 22,或者telnet ServerB_IP 22。如果连接失败,说明ServerB的防火墙未放行该端口,或者中间网络设备拦截了SSH流量。
第二步:检查ServerB的SSH服务状态
Windows默认无SSH服务,你能远程登录说明已部署(如OpenSSH),需确认:
- SSH服务是否正常运行:在ServerB的服务列表中找到
OpenSSH SSH Server,查看状态是否为正在运行,若未启动则手动启动并设置为自动启动。 - 确认SSH监听端口:打开ServerB的SSH配置文件(OpenSSH路径为
C:\ProgramData\ssh\sshd_config),检查Port字段值,若不是默认22,Paramiko连接时必须指定对应端口。 - 验证密码登录权限:配置文件中
PasswordAuthentication需设为yes,避免因配置变更导致认证通道无法建立。
第三步:修正Windows账户的用户名格式(针对域/本地账户)
如果使用域账户(如DOMAIN\user),Paramiko中直接用单反斜杠会触发转义问题,可通过以下方式处理:
- 用双反斜杠转义:
username='DOMAIN\\user' - 用正斜杠替代反斜杠:
username='DOMAIN/user' - 使用UPN格式:
username='user@domain.com'(需域环境支持)
注意:该问题仅会导致认证失败,不会引发10060超时错误,需先解决网络/SSH服务问题后再调整用户名格式。
第四步:检查Paramiko代码的基础配置
确保代码中主机、端口、账户信息正确,示例参考:
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 域账户用双反斜杠转义,自定义端口需指定port参数 ssh.connect('ServerB_IP或主机名', port=22, username='DOMAIN\\user', password='你的密码') # 执行脚本需指定Python绝对路径和脚本路径 stdin, stdout, stderr = ssh.exec_command('C:\\Python39\\python.exe C:\\scripts\\test.py') # 打印执行结果和错误信息 print(stdout.read().decode('utf-8')) print(stderr.read().decode('utf-8')) finally: ssh.close()
第五步:排查防火墙与安全软件拦截
- ServerB的Windows防火墙:确认已添加
OpenSSH SSH Server的入站规则,或手动创建允许对应SSH端口的入站规则。 - ServerA的出站防火墙:检查是否允许向ServerB的SSH端口发起出站请求,部分严格的安全策略会拦截此类流量。
- 第三方安全软件:临时关闭ServerB上的杀毒软件、EDR工具等,测试是否能正常连接,若恢复则添加SSH服务的放行规则。
内容的提问来源于stack exchange,提问作者user1982778
相关产品推荐
相关产品推荐

