通过SSH隧道连接远程SQL Server的详细步骤

以下是通过SSH隧道将本地客户端(如SSMS、Azure Data Studio)安全连接到远程Linux服务器上SQL Server的操作指南,涵盖配置、连接和故障排查。


一、配置SSH隧道

  1. 建立SSH端口转发
    在本地计算机上执行命令,将本地端口(如11433)通过SSH隧道映射到远程服务器的SQL Server端口(默认1433):
  2. bashCopy Code# 命令格式: ssh -N -L <本地端口>:localhost:<远程SQL端口> <用户名>@<服务器IP> -p <SSH端口> # 示例(默认SSH端口22): ssh -N -L 11433:localhost:1433 user@192.168.1.100
  3. Windows用户使用PowerShell
    Windows 10及以上版本支持OpenSSH客户端:powershellCopy Code
  4. ssh -N -L 11433:localhost:1433 user@192.168.1.100 或使用PuTTY配置隧道:
    • 在PuTTY的Connection > SSH > Tunnels中,设置Source port: 11433Destination: localhost:1433,保存会话后连接。

二、本地客户端连接配置

  1. 使用SQL Server Management Studio (SSMS)
    • 打开SSMS,在连接对话框中填写:
      • 服务器名称‌:localhost,11433(逗号分隔本地端口)。
      • 身份验证‌:选择“SQL Server身份验证”。
      • 登录名/密码‌:输入SQL Server的账号(如SA)及其密码。
    • 点击“连接”即可通过隧道访问远程SQL Server。
  2. 使用Azure Data Studio
    • 新建连接,配置如下:
      • 服务器‌:localhost,11433
      • 认证类型‌:SQL登录
      • 用户名/密码‌:SQL Server账号信息。
  3. 其他工具(如DBeaver)
    • 在连接配置中,将主机名设为localhost,端口为11433,其余与常规SQL Server配置一致。

三、验证与故障排查

  1. 检查隧道是否生效
    • 在本地执行命令,验证端口是否监听:bashCopy Code# Linux/macOS netstat -an | grep 11433 # Windows netstat -ano | findstr 11433 若显示LISTENING状态,则隧道正常。
  2. 常见问题解决
    • 连接超时‌:
      • 确认SSH隧道命令未中断(保持终端窗口打开)。
      • 检查远程服务器的SQL Server服务是否运行:bashCopy Codesudo systemctl status mssql-server
    • 权限拒绝‌:
      • 确保SQL Server账号(如SA)已启用远程登录权限:sqlCopy CodeALTER LOGIN SA ENABLE;
      • 检查服务器防火墙是否允许SSH端口(默认22)和SQL Server本地访问:bashCopy Codesudo firewall-cmd --list-ports # 查看已开放端口 sudo firewall-cmd --add-port=1433/tcp --permanent # 仅需本地访问,无需公网开放
    • 端口冲突‌:
      • 若本地端口11433被占用,更换其他端口(如21433)。

四、安全增强建议

  1. 使用非默认端口
    • 修改SQL Server端口(如23456),降低扫描攻击风险:bashCopy Code# 编辑配置文件 sudo vi /var/opt/mssql/mssql.conf # 添加或修改以下行

[network]

tcpport = 23456 重启服务后,SSH隧道命令需同步修改目标端口:

bashCopy Codessh -N -L 11433:localhost:23453 user@192.168.1.100

SSH密钥认证
替代密码登录,提升安全性:

bashCopy Code# 本地生成密钥对
ssh-keygen -t ed25519
# 将公钥上传到服务器
ssh-copy-id user@192.168.1.100
# 建立隧道时无需输入密码
ssh -N -L 11433:localhost:1433 user@192.168.1.100 -i ~/.ssh/id_ed25519

加密传输

  • 在SQL Server中启用SSL加密,防止数据泄露:bashCopy Codesudo /opt/mssql/bin/mssql-conf set network.forceencryption 1 sudo systemctl restart mssql-server

总结

通过SSH隧道连接远程SQL Server,既能绕过公网暴露端口的风险,又可利用SSH加密保障传输安全。按上述步骤配置后,本地客户端工具可直接通过localhost:<端口>访问远程数据库,适用于开发调试、生产维护等场景。遇到问题时,优先检查隧道状态、服务运行及防火墙规则。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注