You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:06:08