【问题标题】:PDO via SSH2 in PHP?在 PHP 中通过 SSH2 进行 PDO?
【发布时间】:2015-08-25 18:53:36
【问题描述】:

我正在尝试访问只能在本地 (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 连接的远程服务器上?

谢谢!

【问题讨论】:

    标签: php mysql pdo ssh


    【解决方案1】:

    正如您已经注意到的,您的脚本正在尝试连接到您的本地 MySQL 服务器,而不是远程服务器。为了让PDO 与远程服务器建立连接,您可以建立一个SSH tunnel 并将本地端口转发到服务器端口。如此处所示https://brettrawlins.com/blog/mysql-ssh-tunnel

    在 php 中运行 ssh 命令:shell_exec(ssh code here)

    你可能想看看:Connect to a MySQL server over SSH in PHP

    然而,正如其中所指出的,这种方法相对较慢,因为您每次查询数据库时都必须创建一个新隧道,从而使您的查询花费相当长的时间。我想对于开发环境,这是一个有效的选择,因为您没有 static IP,但我认为这在生产环境中不起作用。

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

    【讨论】:

    • 谢谢 - 我认为更稳定的解决方案是 SSL 连接。只是为了理解:SSH 解决方案是否像我认为的那样安全?还是只是工作量大且超负荷?
    • 从安全的角度来看:如果您的代码泄露,它会将您的 SSH 登录凭据硬编码到其中。即使您正在使用公钥身份验证,这也不是您正在寻找的,您应该这样做。从实际的角度来看:如果你想加密你的数据库流量,这就是 SSL 的用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多