以下是通过SSH隧道将本地客户端(如SSMS、Azure Data Studio)安全连接到远程Linux服务器上SQL Server的操作指南,涵盖配置、连接和故障排查。
一、配置SSH隧道
- 建立SSH端口转发
在本地计算机上执行命令,将本地端口(如11433
)通过SSH隧道映射到远程服务器的SQL Server端口(默认1433
): - bashCopy Code
# 命令格式: ssh -N -L <本地端口>:localhost:<远程SQL端口> <用户名>@<服务器IP> -p <SSH端口> # 示例(默认SSH端口22): ssh -N -L 11433:localhost:1433 user@192.168.1.100
- Windows用户使用PowerShell
Windows 10及以上版本支持OpenSSH客户端:powershellCopy Code ssh -N -L 11433:localhost:1433 user@192.168.1.100
或使用PuTTY配置隧道:- 在PuTTY的
Connection > SSH > Tunnels
中,设置Source port: 11433
、Destination: localhost:1433
,保存会话后连接。
- 在PuTTY的
二、本地客户端连接配置
- 使用SQL Server Management Studio (SSMS)
- 打开SSMS,在连接对话框中填写:
- 服务器名称:
localhost,11433
(逗号分隔本地端口)。 - 身份验证:选择“SQL Server身份验证”。
- 登录名/密码:输入SQL Server的账号(如
SA
)及其密码。
- 服务器名称:
- 点击“连接”即可通过隧道访问远程SQL Server。
- 打开SSMS,在连接对话框中填写:
- 使用Azure Data Studio
- 新建连接,配置如下:
- 服务器:
localhost,11433
- 认证类型:SQL登录
- 用户名/密码:SQL Server账号信息。
- 服务器:
- 新建连接,配置如下:
- 其他工具(如DBeaver)
- 在连接配置中,将主机名设为
localhost
,端口为11433
,其余与常规SQL Server配置一致。
- 在连接配置中,将主机名设为
三、验证与故障排查
- 检查隧道是否生效
- 在本地执行命令,验证端口是否监听:bashCopy Code
# Linux/macOS netstat -an | grep 11433 # Windows netstat -ano | findstr 11433
若显示LISTENING
状态,则隧道正常。
- 在本地执行命令,验证端口是否监听:bashCopy Code
- 常见问题解决
- 连接超时:
- 确认SSH隧道命令未中断(保持终端窗口打开)。
- 检查远程服务器的SQL Server服务是否运行:bashCopy Code
sudo systemctl status mssql-server
- 权限拒绝:
- 确保SQL Server账号(如
SA
)已启用远程登录权限:sqlCopy CodeALTER LOGIN SA ENABLE;
- 检查服务器防火墙是否允许SSH端口(默认22)和SQL Server本地访问:bashCopy Code
sudo firewall-cmd --list-ports # 查看已开放端口 sudo firewall-cmd --add-port=1433/tcp --permanent # 仅需本地访问,无需公网开放
- 确保SQL Server账号(如
- 端口冲突:
- 若本地端口
11433
被占用,更换其他端口(如21433
)。
- 若本地端口
- 连接超时:
四、安全增强建议
- 使用非默认端口
- 修改SQL Server端口(如
23456
),降低扫描攻击风险:bashCopy Code# 编辑配置文件 sudo vi /var/opt/mssql/mssql.conf # 添加或修改以下行
- 修改SQL Server端口(如
[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 Code
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1 sudo systemctl restart mssql-server
总结
通过SSH隧道连接远程SQL Server,既能绕过公网暴露端口的风险,又可利用SSH加密保障传输安全。按上述步骤配置后,本地客户端工具可直接通过localhost:<端口>
访问远程数据库,适用于开发调试、生产维护等场景。遇到问题时,优先检查隧道状态、服务运行及防火墙规则。