【问题标题】:Connect to remote MSSQL server with PHP through SSH tunnel通过 SSH 隧道使用 PHP 连接到远程 MSSQL 服务器
【发布时间】:2017-09-27 06:44:29
【问题描述】:

防火墙的 MS SQL 服务器想要向互联网上的 Ubuntu 服务器提供数据。

所以我建立了一个从 MS SQL 服务器到 Ubuntu 服务器的 SSH 隧道,要求 Ubuntu 将其 port 1433 流量发送到 MS SQL 的 port 1433

根据this Stack Overflow 的回答,我想我应该在 MS SQL 服务器上这样做:

ssh -R 1433:localhost:1433 ubuntu.example.com

这是一台 Windows 机器,所以我在 PuTTY 中做了这个:

在本地网络中,我测试了使用PHP连接SQL服务器,它可以工作。

$server = '192.168.0.12';
$user = 'buttle';
$pass = '1234';
mssql_connect($server,$user,$pass);

现在我想尝试使用 SSH 隧道而不是“直接”连接来连接相同的两台机器。所以我把 $server 改成这样:

$server = 'localhost,1433';

然后我使用 PuTTy 将 SSH 隧道从 SQL Server 机器连接到 Ubuntu 机器。也许这就是我出错的地方,因为我不知道自己在做什么。

我在 Ubuntu 机器上遇到这个 PHP 错误:

Warning: mssql_connect(): Unable to connect to server: localhost,1433 

编辑:

也试过这个:

还有这个:

[![在 MS SQL 服务器中指定 IP 地址的远程 IPv4][5]][5]

最后,我已经解决了。看我的回答。

【问题讨论】:

  • 使用IPv4和端口
  • @Sami 见编辑。这似乎没有帮助。
  • 您是否在服务器属性中检查了allow remote connections
  • 您的意思是 MS SQL 属性吗?我在没有来自本地网络的 SSH 隧道的情况下进行连接。当我打开隧道时它停止工作。

标签: php sql-server ssh


【解决方案1】:

所有使用 PHP 的mssql 函数的在线教程都假设您在 Windows 环境中运行 PHP。显然,在 Windows 中,IP 和端口号用逗号分隔,而在 Linux 中则用冒号分隔。

// Linux running PHP
$server = 'localhost:1433';
// Windows running PHP
$server = 'localhost,1433';

像往常一样,数小时的问题归结为一个字节。

【讨论】:

  • 那位好先生,是一个很好的调查编码......顺便说一句 - 他们到底为什么要在 ip 和 port 之间放置一个逗号?
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 2016-11-18
  • 2020-07-05
  • 2019-11-19
  • 2019-01-29
  • 2014-05-03
  • 2019-11-12
  • 2020-09-30
相关资源
最近更新 更多