通过 SSH 连接到 MySQL

问题描述

我必须连接到远程数据库。我必须使用 SSH 连接到远程服务器才能连接到数据库。 我可以使用 MysqLWorkbench 做到这一点:访问数据库没有问题。

我可以告诉我的网站连接到远程服务器: (我使用 PHPseclib 因为 PHP libssh2 拒绝和我一起工作)

$ssh = new SSH2('111.222.333.444',12345);
if (!$ssh->login("SSH-username","SSH-password")) {
  echo 'Error';
} else {
  echo 'Tadam !';
}

这个短代码(上面)工作正常。我确实可以访问远程服务器。

如果我添加这个(使用认的 MysqL 端口 3306):

new PDO('MysqL:host=111.222.333.444;port=3306;dbname=DB-name','DB-username','DB-password');

PHP 显示“致命错误”(仅此而已...)

如果我尝试(使用端口 12345,用于 SSH 连接):

new PDO('MysqL:host=111.222.333.444;port=12345;dbname=DB-name','DB-password');

PHP 显示

致命错误:未捕获的 PDOException:数据包乱序。预期 0 收到 45。数据包大小=4739923

一个 PDOException: sqlSTATE[HY000] [2006] MysqL 服务器已经消失

一个信息: 我可以使用 $ssh->exec() 读取数据库但我想用 PDO 来代替

$ssh->exec('MysqL -uDB-username -pDB-password DB-name -e "SELECT * FROM table"');

我必须承认,所有这些 SSH 的东西都不是我真正的领域......我真的不明白它是如何工作的,或者我必须做什么......

我知道在stackoverflow上已经有人问过一些类似的问题,我读了它们,但我仍然无法连接到这个远程数据库

请帮帮我。

解决方法

引用 https://marc.info/?l=php-internals&m=136320712022835&w=2 :

会不会更 感觉只使用像 autossh 这样的东西来维护你的 ssh 隧道和 有 PHP 连接到您的隧道端点吗? PHP 中的 mysqli_connect() 是 只是底层库之上的一个薄包装。

我的猜测是 PDO 的工作方式可能类似。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...