【问题标题】:Querying a MySQL database on a remote webserver through SSH通过 SSH 查询远程 Web 服务器上的 MySQL 数据库
【发布时间】:2017-05-06 05:35:40
【问题描述】:

我们有一个内部 MySQL 数据库供我们的客户服务部门用来做报价,我们的网站上有一个外部 MySQL 数据库供我们的客户用来做报价。我有一份我编写的 PHP 报告,它为我提供了来自内部数据库的信息。现在我想修改报告以包含来自外部数据库的数据。我需要使用 SSH 连接来连接到外部数据库。我一直在研究使用 cURL 或 SSH2,但我不确定这两种方法是否正确。以前有没有人在网络服务器上查询过 SSH MySQL 数据库,或者有人知道我需要做什么才能完成这项工作吗?感谢您提供的任何帮助!

【问题讨论】:

  • 可以外接远程服务器的mysql端口吗?如果是这样,您可以像连接任何其他 mysql 服务器一样连接到他们的服务器。
  • 这就是我认为我需要在 PHP 中使用 SSH2 代码来做的事情。我以前没有这样做过,所以我不确定它是否会起作用。在我花了太多时间弄清楚 SSH2 是否是要走的路之前,我想,我会看看是否有人以前做过类似的事情,并能指出我正确的方向。我已经开始研究 cURL,但从我所看到的来看,我认为这不会满足我的需要。到目前为止,我认为我必须尝试使用​​ SSH2 连接到数据库,然后看看我是否可以在连接后进行查询。
  • MySQL 的连接协议确实允许对其进行 SSL 加密。除非您不想将 mysql 端口暴露给全世界,否则无需使用 SSH 和/或隧道:dev.mysql.com/doc/refman/5.0/en/secure-using-ssl.html

标签: php mysql ssh


【解决方案1】:

我实际上使用了一个名为“Sequel Pro”的 MySQL GUI 客户端,它确实提供了通过 SSH 连接连接到 MySQL 的选项。这是完全可行的,但如果您可以选择在没有它的情况下连接到数据库(例如,您可以从主机“外部”连接到它),您应该更喜欢这个。

我认为您可以通过 SSH 查询您的数据库的最简单方法是使用 SSH 端口转发,因此您将生成一个可以执行 ssh user@host-that-has-the-db -L3306:localhost:3306 的进程,然后您将在 localhost 上连接您的 MySQL 连接器。

SSH 的 -L 参数指示它进行本地端口转发,因此 SSH 将侦听本地端口并将其接收到的内容直接从另一端转发到指定的远程主机/端口。显然我的示例在两端都使用端口 3306,但可以酌情更改(RTM 对此有更多了解)

【讨论】:

  • 所以我会在网络服务器上生成该进程,对吗?我们的网站是托管的,在执行此类操作时,提供商并不是最有帮助的。这是使它工作的唯一方法,还是有其他方法?我应该声明我可以使用 Navicat 远程登录数据库...我只是想从我的 PHP 代码中找到一种方法。谢谢!
  • @kheugel 是的,SSH 将是服务器端的。你如何通过 Navicat 进行操作?它会为你做 SSH 调谐吗?如果您无法在 PHP 中生成 ssh 或使用 OpenSSH API,那么您将不走运,您将不得不求助于其他方式获取数据。
【解决方案2】:

是的,您可以通过 SSH 从 bash 查询 mysql,但这不是最佳且可扩展的方式。最好的解决方案是在生产服务器上创建一个 REST Web 服务。然后您的内部系统将通过身份验证查询该远程服务。

【讨论】:

【解决方案3】:

你设置了从本地服务器上的某个可用端口到远程服务器上的 mysql 端口的隧道:

ssh -L 3307:localhost:3306 someuser@remoteserver

这会在本地系统上的端口 3307 上创建一个隧道侦听,该隧道连接到远程服务器上的端口 3306 (MySQL)。

然后将您的 PHP 代码指向端口 3307 而不是 3306 ,它将通过隧道连接到远程服务器上的 mysql。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2023-03-08
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多