通过PHP通过SSH连接到mysql数据库

时间:2013-08-05 23:51:50

标签: php mysql ssh mysqli phpseclib

我已经编写了一个在本地连接到mysql数据库的php文件。现在,我想通过SSH连接到远程数据库。目前我的数据库的连接函数在php中如下:

$this->db = new mysqli(_SERVR_URL, _SERVR_USER , _SERVR_PASS, _SERVR_DB);
    if ($this->db->connect_errno) {
        echo "Failed to connect to MySQL: (" . $this->db->connect_errno . ") " . $this->db->connect_error;
    }
    else{
        //echo "Successfully connected!! <BR><BR>";
    }

我想只更改connect函数(上面),以便其余的代码仍可正常工作。我已经成功安装了phpseclib并且对安装php的ssh扩展不感兴趣,因为经过近5个小时的努力,这些扩展无法正常工作。 phpseclib正在工作,我认为这是因为当我使用require时它不会死。

但是,当我尝试开始使用ssh时,会抛出服务器错误:

$ssh = new Net_SSH1(myURL);

我通常通过SSH连接到服务器的方式是使用.pem文件。我可以获得一些指导:

  1. 为什么当前代码可能会抛出错误?
  2. 如果可以的话。
  3. 您如何使用.pem文件编写连接代码。

2 个答案:

答案 0 :(得分:4)

  

我认为你在这一点上运气不好。你可以使用ssh   您的PHP代码中的扩展名,或者您有权访问服务器   可以尝试在命令行上创建一个ssh隧道。

     

但是,您可能需要特殊权限才能执行此操作。它也是   看起来你没有ssh访问这个主机帐户。

duplicate由@jpm回答

@ lalafur Waage在Setting up tunneling

上发布了

Connect to a MySQL server over SSH in PHP

this one用于@Sosy的隧道掘进

shell_exec(“ssh -f -L 3307:127.0.0.1:3306 user@remote.rjmetrics.com sleep 60 >> logfile”);  
$db = mysqli_connect(’127.0.0.1′, ‘sqluser’, ‘sqlpassword’, ‘rjmadmin’, 3307);

答案 1 :(得分:1)

mysql扩展目前不支持此功能。修改扩展本身可能并不困难,但在那一点上,它必须是一个自定义的PECL扩展,充其量。这个想法在前一段时间在PHP Internals邮件列表中进行了讨论:

http://comments.gmane.org/gmane.comp.php.devel/79520