1

我很难理解 SSH 隧道问题。问题如下:

本地机器 --> 中间服务器 --> MySQL 服务器

MySQL 服务器只能从中间服务器访问。我有一个用于中间服务器的 SSH 帐户。

如何从本地机器(特别是 PHP)连接到 MySQL 服务器?我希望能够正常对待 MySQL 服务器,以便可以使用 PDO。

我努力了:

  1. 打开 ssh (shell_exec('ssh -L 3307:intermediate-server:3306 username@intermediate-server') ) 老实说,不完全确定这是否正确。

  2. 在端口 3307 上使用 mysqli 连接(查看是否可以建立连接)。

它不起作用,我已经尝试了所有我能想到的东西。

4

2 回答 2

2

您的 ssh 端口映射不正确。

语法是:

<port for ssh server to listen on>:<host to forward to>:<port to forward to>

您正在使用:

ssh -L 3307:intermediate-server:3306 username@intermediate-server

你应该使用:

ssh -L 3307:mysql-server:3306 username@intermediate-server

换句话说,中间服务器应该:

  • 监听 3307 端口
  • 转发到主机 mysql-server
  • 在端口 3306

其次,您不想从 PHP 中启动 ssh 隧道。您想在另一个进程中单独执行此操作,以便它始终处于打开状态。要么这样,要么在 PHP 内部检查隧道是否关闭,如果是,则分叉并断开 ssh 连接。

于 2013-08-27T00:05:16.483 回答
2

使用这种治疗方法 ~/.ssh/config:

Host external-server
    User                        root
    Hostname                    1.2.3.4
Host internal-server
    User                        root
    Hostname                    1.2.3.5
    ProxyCommand                ssh external-server nc -q0 %h %p

现在你可以

$ ssh internal-server

文章:http ://sshmenu.sourceforge.net/articles/transparent-mulihop.html

于 2014-03-13T23:12:56.853 回答