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

4

我已经编写了一个连接到本地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);

我通常使用.pem文件来SSH到我的服务器。请问以下问题:

  1. 为什么当前代码可能会抛出错误?
  2. 这是否可行?
  3. 如何使用.pem文件编写连接代码?

复制:https://dev59.com/NnVC5IYBdhLWcg3wZwJT中通过SSH连接到MySQL服务器 - kwarunek
1
这不是重复的问题。他们不需要使用.pem文件,也没有特别询问phpseclib库。 - Lugubrious
2个回答

4
我认为你在这件事上运气不好。你可以在PHP代码中使用ssh扩展,或者如果你有服务器访问权限,可以尝试在命令行上创建ssh隧道。不过你可能需要特殊权限才能这样做。另外看起来你没有ssh访问此主机帐户。 duplicate由@jpm回答。 设置隧道由@Ólafur Waage发布于在PHP中通过SSH连接到MySQL服务器
还有一个关于隧道的这个,由@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);

谢谢你帮忙设置隧道 - 这样做真的安全吗? - Lugubrious
然而,这可能会产生一些漏洞和一些无法在PHP中处理的系统错误,这是替代方案与努力与简单性的问题。 - kwarunek
我的 PHP 脚本无法创建 SSH 隧道,但是当我在终端中执行时,代码会按照指定的时间工作。有什么原因会导致这种情况发生吗? - Lugubrious
检查shell_exec是否为false,检查日志文件,检查您的php配置(safe_mode应该被禁用),尝试使用system()或exec()。 - kwarunek
我已经做了这些事情 - 我从shell exec得到的stderror是:“无法创建目录'/Library/WebServer/.ssh'。主机密钥验证失败。”我看到了几篇关于此问题的stackoverflow帖子,但我对安全漏洞非常警惕。我更倾向于接受一个有关phpseclib正在发生什么的信息的答案,因为它更加安全。 - Lugubrious
PHP的mysql扩展无法通过PHP sockets进行隧道传输。因此,除非您拥有一个纯PHP mysql实现(或想要重写mysql扩展),否则您将(不幸地)没有任何机会:( - neubert

1

目前mysql扩展不支持这个功能。修改扩展本身可能并不难,但这时候它最多只能成为一个自定义的PECL扩展。这个想法在一段时间前曾在PHP Internals邮件列表上讨论过:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接