Mac端VS Code通过SSH隧道用AD凭证连接MS SQL实例配置求助
解决Mac端VS Code通过SSH隧道传递AD凭证连接SQL Server的问题
咱们先对齐下已知条件:你已经搞定了公司Mac的Kerberos直连、Windows端的SSH隧道+VS Code连接,现在卡在Mac端VS Code没法通过隧道传递AD凭证——核心是要让VS Code的mssql扩展调用本地Kerberos凭证,通过SSH转发的端口完成AD域验证,结合你已有的freetds和SSH配置,咱们一步步来:
1. 确保本地Mac的Kerberos客户端能正常获取AD凭证
Kerberos是AD验证的核心,首先得保证本地Mac能拿到有效的AD票证:
- 编辑
/etc/krb5.conf(需要sudo权限),把你的AD域配置填进去,示例如下:[libdefaults] default_realm = YOUR_COMPANY_AD.COM # 替换成你的AD域名(大写) dns_lookup_kdc = true dns_lookup_realm = true ticket_lifetime = 24h renew_lifetime = 7d [realms] YOUR_COMPANY_AD.COM = { kdc = ad-controller.yourcompany.com # 替换成你的AD域控制器地址 admin_server = ad-controller.yourcompany.com } [domain_realm] .yourcompany.com = YOUR_COMPANY_AD.COM yourcompany.com = YOUR_COMPANY_AD.COM - 打开终端,获取Kerberos票证:
输入你的AD密码后,用kinit your_ad_username@YOUR_COMPANY_AD.COMklist验证票证是否有效,能看到票证信息就说明没问题。
2. 确认SSH隧道配置正确且处于运行状态
你已经有~/.ssh/config的配置,再检查下端口转发是否指向SQL Server的正确端口(默认1433),示例配置:
Host work-mac-tunnel HostName <工作Mac的VPN可达IP/主机名> User <工作Mac的登录用户名> LocalForward 1433 <公司SQL Server的AD主机名>:1433 # 把本地1433转发到SQL Server的1433 ServerAliveInterval 60 # 防止隧道超时断开
- 启动隧道:在终端运行
ssh work-mac-tunnel,保持这个窗口不要关闭(或者用ssh -fN work-mac-tunnel后台运行)。
3. 配置VS Code的mssql扩展对接Kerberos和隧道
这一步是关键,要让VS Code知道用Kerberos凭证,并且通过本地转发的端口连接:
- 打开VS Code,按
Cmd+Shift+P打开命令面板,选择MS SQL: Add Connection - 服务器地址输入:
localhost,1433(因为隧道把本地1433端口映射到了公司的SQL Server) - 身份验证类型选择Integrated(这个选项会调用本地Kerberos凭证)
- 按需填写数据库名称,然后点击Connect
常见坑点修复
- 如果VS Code提示找不到freetds库:打开VS Code的设置(Cmd+,),搜索
mssql.freetds.path,填入Homebrew安装的freetds路径:- Intel Mac:
/usr/local/bin/freetds - Apple Silicon Mac:
/opt/homebrew/bin/freetds
或者直接在settings.json里添加:
"mssql.freetds.path": "/opt/homebrew/bin/freetds" - Intel Mac:
- 如果连接时报Kerberos错误:检查
/usr/local/etc/freetds.conf(Homebrew安装的freetds配置文件),确保全局配置开启Kerberos:[global] tds version = 7.4 # SQL Server 2012+用7.4,按需调整 client charset = UTF-8 kerberos = true realm = YOUR_COMPANY_AD.COM - 验证freetds本身能通过隧道+Kerberos连接:在终端运行
如果能成功进入SQL命令行,说明Kerberos和隧道没问题,那VS Code只要配置正确就能连上。tsql -S localhost,1433 -K
4. 日常使用小技巧
- 每次重启Mac或者Kerberos票证过期(默认24小时),重新运行
kinit获取票证 - 可以把
ssh -fN work-mac-tunnel做成快捷命令,方便快速启动隧道 - 确保本地Mac的时间和AD域控制器同步(误差不能超过5分钟),Kerberos对时间非常敏感
内容的提问来源于stack exchange,提问作者p_k_n_y
相关产品推荐
相关产品推荐

