如何通过PHP+SSH连接远程MySQL?

问题描述 投票:0回答:1

我正在尝试通过 PHP 连接到 MySql 数据库。该数据库正在远程服务器上运行,我可以访问该服务器。但我无法建立连接。

我已经在这里研究了很多以找到原因,但出于什么原因它不起作用。

在 PHP 中,我正在执行以下操作(正如我也在论坛中读到的那样):

shell_exec("sshpass -p SSHPASS ssh -L 33065:$dbhost:33060 SSHUSER@SSHHOST sleep 5");
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname;port=33065", $dbuser, $dbpass);

远程数据库在端口

33060
上运行,本地端口
33065
未使用。
sshpass
命令用于将密码发送到
ssh

我得到一个始终

SQLSTATE[HY000] [2002] Connection refused
并且隧道连接未建立。

我有什么做错或忘记做的事情吗?

php mysql ssh pdo ssh-tunnel
1个回答
0
投票
$dbh = new PDO("mysql:host=127.0.0.1;dbname=$dbname;port=33065", $dbuser, $dbpass);
                           ^^^^^^^^^

端口转发的要点是您计算机上的客户端将连接到 localhost 上的端口。然后 ssh 连接从那里获取它并将其转发到您为隧道设置的目的地。

对于 MySQL,您必须使用“127.0.0.1”,而不是“localhost”一词,因为 MySQL 将 localhost 视为非 TCP 连接,使用 UNIX 域套接字。它不使用任何端口,也不会被转发。

P.S.:我不会设计这个来为每个 PHP 请求打开一个新的 ssh 隧道,除非请求不频繁。在运行应用程序之前设置一个 ssh 隧道,并让所有 PHP 请求使用该隧道。

P.P.S.:更好的是,使用 VPN 连接到远程网络。

© www.soinside.com 2019 - 2024. All rights reserved.