在PHP中通过SSH2进行PDO?

在PHP中通过SSH2进行PDO?,php,mysql,pdo,ssh,Php,Mysql,Pdo,Ssh,我正在尝试访问一个只能在本地(localhost)访问的远程MySQL数据库 我的代码如下所示: $connection = ssh2_connect('IP to Server', 22); if (ssh2_auth_password($connection, 'User', 'Password')) { echo "Authentication Successful!\n"; } else { die('Authentication Fai

我正在尝试访问一个只能在本地(localhost)访问的远程MySQL数据库

我的代码如下所示:

$connection = ssh2_connect('IP to Server', 22);

    if (ssh2_auth_password($connection, 'User', 'Password')) {
        echo "Authentication Successful!\n";
    } else {
        die('Authentication Failed...');
    }

    $tunnel = ssh2_tunnel($connection, '127.0.0.1', 3306);

    try {
        $this->_connection = new PDO($dsn, $config['login'], $config['password'], $flags);
        $this->connected = true;
        if (! empty($config['settings'])) {
            foreach ($config['settings'] as $key => $value) {
                $this->_execute("SET $key=$value");
            }
        }
    } catch (PDOException $e) {
        throw new MissingConnectionException(array(
                'class' => get_class($this),
                'message' => $e->getMessage()
        ));
    }
该脚本一直成功到$tunnel。PDO连接因“连接被拒绝”而失败。我想PDO正在尝试连接到MAMP?$dsn变量看起来像“mysql:host=127.0.0.1;port=3306;dbname=mydb”

如何告诉MAMP 127.0.0.1位于通过SSH连接的远程服务器上


谢谢大家!

正如您已经注意到的,您的脚本正在尝试连接到本地的
MySQL
服务器,而不是远程服务器。为了使
PDO
与远程服务器建立连接,您可以建立
SSH隧道
,并将本地端口转发到服务器端口。如图所示

要在php中运行ssh命令:
shell\u exec(此处为ssh代码)

您可能希望看到:

但是,正如上面提到的,这种方法相对较慢,因为每次查询数据库时都必须创建一个新的隧道,这会使查询花费更长的时间。我认为对于开发环境来说,这是一个有效的选项,因为您没有
静态IP
,但我认为这在生产环境中不起作用


如果您试图这样做是为了加密,我建议您使用
SSL
连接到数据库。但是请注意,并非所有
PHP
版本都支持
SSL
for
PDO

谢谢-我认为更稳定的解决方案是SSL连接。仅供理解:SSH解决方案是否像我认为的那样安全?或者,这只是一个大量的工作和过载?从安全的角度来看:如果您的代码曾经泄漏,它将有您的SSH登录凭据硬编码到它。这并不是您想要的,即使您使用的是公钥身份验证,您也应该这样做。从实用的角度来看:如果您想要加密数据库通信量,SSL就是这样做的。