无法使用sqlcmd通过SSH隧道访问SQL数据库

时间:2017-11-03 09:56:40

标签: azure ssh azure-sql-database sqlcmd ssh-tunnel

我需要通过跳转框(Azure VM)从本地计算机连接到Azure SQL DB。我使用以下命令设置端口转发:

std::string

我可以确认隧道已设置,因为在详细模式下我看到了消息

ssh -fN -L 41433:my-db.database.windows.net:1433 me@jump-box

现在,当我跑

Local connections to LOCALHOST:41433 forwarded to remote address my-db.database.windows.net:1433

我收到以下错误消息

sqlcmd -S 127.0.0.1,41433 -U username -P password -d db 

我确保Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : [Microsoft][ODBC Driver 13 for SQL Server] [SQL Server]Cannot open server "127.0.0.1" requested by the login. The login failed.. /etc/ssh/sshd_config行和GatewayPorts yes

有人可以帮我弄清楚我做错了吗?

2 个答案:

答案 0 :(得分:3)

Azure SQL数据库需要知道您的用户名所针对的数据库实例。这通常使用服务器名称完成。如果指定127.0.0.1作为服务器名称,则Azure无法知道您的实例。

最好的方法是在登录名中指定实例,例如username@my-db.database.windows.net。

sqlcmd -S 127.0.0.1,41433 -U username@yourdb.database.windows.net -P password -d db 

这样,您无需修改​​hosts文件,并且可以使用相同的隧道连接同时连接到多个Azure SQL数据库实例。我希望这可以帮助您安全地连接到Azure SQL数据库。

答案 1 :(得分:2)

Azure在登录过程中发送的服务器名称上匹配。因此您的错误“无法打开服务器”127.0.0.1“登录请求。”。

要解决此问题,请尝试将带有127.0.0.1 IP的Azure主机名添加到HOSTS文件,然后向sqlcmd提供相同的主机名,以便驱动程序将主机名解析为并连接到隧道入口,然后发送相同的主机名主机名,好像它没有使用隧道。