Windows7虚拟机中Python脚本连接Redmine失败求助
我来帮你梳理下虚拟机里连接失败的可能原因——毕竟脚本在其他机器能正常跑,问题大概率出在虚拟机的环境差异上,你可以逐个排查:
虚拟机网络配置异常
这是最常见的诱因。比如虚拟机用了NAT模式但端口映射没配置对,或者选了仅主机模式导致无法访问外部Redmine服务器。你先在虚拟机里打开浏览器,直接访问脚本里的https://url,看看能不能正常加载Redmine页面。如果浏览器都连不上,那肯定是网络层面的问题,得检查虚拟机的网卡设置、网关、DNS配置,或者宿主机的防火墙有没有阻断虚拟机的出站请求。Windows 7的SSL/TLS协议支持不足
很多现代Redmine服务器会要求用TLS 1.2及以上版本的协议,但Windows 7默认对这些新协议的支持不全。Python-redmine底层依赖的requests库,在Windows 7上可能因为系统不支持新协议导致SSL握手失败。你可以先在脚本开头加这段代码临时测试:import ssl ssl._create_default_https_context = ssl._create_unverified_context注意这会跳过证书验证,只是用来排查问题。如果有效,建议手动开启Windows 7的TLS 1.2支持:通过注册表编辑器,在
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols路径下,添加TLS 1.2的客户端启用项。Python依赖版本不兼容
虚拟机里的python-redmine、requests版本可能太老,和Redmine服务器的API不兼容。你可以先对比正常机器的依赖版本,在虚拟机里执行这条命令查看当前版本:pip list | findstr "python-redmine requests"如果版本差异大,就升级依赖试试:
pip install --upgrade python-redmine requests防火墙或安全软件拦截
Windows 7自带的防火墙,或者虚拟机里装的杀毒软件,可能把Python的出站请求给拦了。你可以临时关闭防火墙试试(控制面板→Windows防火墙→打开或关闭Windows防火墙),如果关闭后能连上,就需要在防火墙里添加规则,允许Python.exe访问网络。另外也要检查宿主机的防火墙有没有限制虚拟机的流量。Redmine服务器的IP白名单限制
有些Redmine服务器会设置IP白名单,只允许特定IP访问API。虚拟机的出口IP和你正常机器的IP不一样,可能不在白名单里。你可以查一下虚拟机的公网IP,然后联系Redmine管理员确认这个IP是否被允许访问。证书信任问题
如果Redmine用的是自签名证书或者内部CA颁发的证书,虚拟机里的Windows系统和Python环境可能没信任这个证书。浏览器访问时会弹出证书警告,Python脚本则会直接报错。解决办法是把Redmine的证书导入Windows 7的受信任根证书颁发机构,或者用刚才提到的临时跳过证书验证的代码(不建议长期使用)。
内容的提问来源于stack exchange,提问作者Takéo Chaman

