【问题标题】:Connect to a mysql database via SSH through PHP通过 PHP 通过 SSH 连接到 mysql 数据库
【发布时间】:2013-08-06 20:07:44
【问题描述】:

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

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

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

$ssh = new Net_SSH1(myURL);

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

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

【问题讨论】:

标签: php mysql ssh mysqli phpseclib


【解决方案1】:

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

不过,您可能需要特殊权限才能执行此操作。它也是 您似乎没有对此主机帐户的 ssh 访问权限。

duplicate@jpm 回答

Setting up tunneling@Ólafur Waage 在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);

【讨论】:

  • 编辑:刚刚看到您的编辑。感谢您对隧道的帮助 - 这样做真的安全吗?
  • 但是,它可能会产生一些漏洞,一些无法在 php 中处理的系统错误,这是替代品 vs. 努力 vs. 简单性的问题
  • 我的 php 脚本不会创建 ssh 隧道,但是当我在终端中创建它时,代码将在指定时间内工作。有什么理由会发生这种情况?
  • 检查 shell_exec 是否为假,检查日志文件,检查你的 php conf(应该禁用安全模式),试试 system() 或 exec()。
  • 我已经完成了这些事情 - 我从 shell exec 得到的标准错误是:“无法创建目录 '/Library/WebServer/.ssh'。主机密钥验证失败。”我看到了几个关于它的 stackoverflow 帖子,但我对安全漏洞非常警惕。我会更倾向于接受包含有关 phpseclib 发生了什么信息的答案,这更安全。
【解决方案2】:

mysql 扩展目前不支持此功能。修改扩展本身可能并不难,但在那时,它最多只能是一个自定义的 PECL 扩展。不久前在 PHP Internals 邮件列表中讨论了这个想法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2016-10-25
    • 2019-02-06
    • 1970-01-01
    • 2021-08-07
    • 2012-12-29
    • 2014-07-20
    相关资源
    最近更新 更多