Debian中Python脚本远程连接Windows端SQL Server报错如何解决?
故障根因定位
你遇到的20009 Connection timed out报错属于网络层连通性故障,说明Debian虚拟机根本无法抵达Windows主机的SQL Server服务端口,和SQL Server账号权限、库名配置无关。
遗漏配置与排查方案
1. 验证基础网络连通性
- 先在Debian虚拟机内执行
ping <Windows主机IP>,如果ping不通优先排查虚拟机网络配置:- 确认虚拟机网络模式不是仅主机NAT模式,改为桥接模式或者手动配置对应端口转发
- 临时关闭Windows主机的公共网络防火墙测试,多数用户仅配置了专用网络的1433放行规则,公共网络默认仍拦截访问
- ping通后执行
nc -zv <Windows主机IP> 1433验证端口连通性,如果返回失败继续往下排查
2. SQL Server TCP/IP配置遗漏项
- 虽然你已经启用了TCP/IP协议,需要确认IPAll分类下的TCP端口明确配置为1433、动态端口为空,很多默认配置会开启动态端口,你放通的1433不是实际监听端口
- 所有TCP/IP配置修改完成后,必须重启SQL Server主服务才会生效,遗漏重启会导致配置不生效
3. Windows防火墙规则遗漏
- 确认你添加的1433端口规则是入站规则,协议为TCP,作用域包含虚拟机所属的IP段,没有限制仅特定IP访问
- 建议同时放通SQL Server浏览器服务的UDP 1434端口,避免多实例场景下服务识别失败
4. 代码配置修正
如果端口验证已经连通仍然报错,可以显式指定连接参数适配:
import pymssql # 显式指定端口和TDS版本,适配不同SQL Server版本 conn = pymssql.connect( server='<Windows主机IP>:1433', user='remote_user', password='你的账号密码', database='db_name', tds_version='7.4' )
如果pymssql仍连接失败,可以换pyodbc驱动测试,Debian下先安装对应依赖:
sudo apt install unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc pip install pyodbc
连接代码示例:
import pyodbc conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=<Windows主机IP>,1433;' 'DATABASE=db_name;' 'UID=remote_user;' 'PWD=你的账号密码' )
快速验证技巧
在Windows主机上执行netstat -ano | findstr 1433,确认SQL Server进程确实在监听0.0.0.0的1433端口,而不是仅监听127.0.0.1本地回环地址。
内容的提问来源于stack exchange,提问作者Oleg Ivanytskyi
相关产品推荐
相关产品推荐

