从 WSL 2/Ubuntu sqlcmd 连接到 Windows 主机上的 SQL 服务器 运行

Connect to SQL Server running on Windows host from a WSL 2/Ubuntu sqlcmd

我有一个宿主运行 Windows 10、WSL 2.我的客人是Ubuntu.

我正在尝试使用 sqlcmd 连接到主机上的 SQL 服务器 运行,但我不确定在连接中使用哪个 IP?

我已经 exposed/enabled 主机 Windows SQL 服务器上的 SQL 配置管理器中的所有内容,我正在使用这样的命令尝试连接:

sqlcmd -S 127.0.0.1 -U sa -P pass

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.

您是否尝试在 /etc/resolv.conf 上查看 IP?

尝试使用那个连接,例如:sqlcmd -S 192.168.202.65 -U sa -P pass

这是因为this

除了使用来自 /etc/resolv.conf 的 IP 外,您还必须在 Windows 防火墙 中打开 1433 端口。

新规则-端口-下一步-特定端口:1433-下一步-允许-下一步-下一步-名称“WSL2sql”


注意:您刚刚打开了面向整个世界的端口,因此请仅在需要时启用/禁用此规则,或将此规则限制为您的 WSL2 IP 地址(双击规则 - 范围 - 远程 IP 广告 -添加您的 WSL2 地址。要在 windows cmd shell)

中查找您的 wsl 主机地址类型 wsl hostname -I

P.S。另请注意,某些 VPN 软件也可能会中断 WSL2/Windows 网络连接。关闭您的 VPN。

启用 "Virtual Machine Monitoring" 对我有用。这四个防火墙规则位于入站列表中,名称以“虚拟机监控”开头:

  • 回应请求(ICMPv4/v6)
  • RPC
  • DCOM 输入
  • NB-会话中

它们似乎默认被禁用,一旦我启用它们,我就能够使用 WSL 生成的 IP 地址 ping 主机以及连接到我的主机 sql 服务器服务 resolv.conf 文件 --

cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 1xx.1xx.1xx.1xx