首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中通过SSH连接到MySQL服务器

在PHP中通过SSH连接到MySQL服务器
EN

Stack Overflow用户
提问于 2008-11-21 17:53:18
回答 5查看 47.2K关注 0票数 20

我想通过ssh建立到我的mysql服务器的ssh隧道。

理想情况下,我应该返回一个mysqli db指针,就像我直接连接一样。

我在一个没有SSH2库的共享主机上,但我可以使用PECL在本地安装它们。

如果有一种方法可以使用本机命令,那就太好了。

我正在考虑类似这样的事情,但没有这些库,它将无法工作。

$connection = ssh2_connect('SERVER IP', 22); 

ssh2_auth_password($connection, 'username', 'password');

$tunnel = ssh2_tunnel($connection, 'DESTINATION IP', 3307);

$db = new mysqli_connect('127.0.0.1', 'DB_USERNAME', 'DB_PASSWORD', 
                         'dbname', 3307, $tunnel)
    or die ('Fail: ' . mysql_error());  

有谁有什么想法吗?我在liquidweb上运行一个共享的CentOS linux主机。

对隧道持久化有什么想法吗?是否可以使用另一个脚本建立它并在PHP中利用它

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-21 18:53:46

埃里克

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

不过,您可能需要特殊权限才能做到这一点。看起来您也没有此托管帐户的ssh访问权限。

--Joao

票数 1
EN

Stack Overflow用户

发布于 2008-11-22 05:44:33

我将使用autossh工具创建到您的mysql数据库的持久ssh隧道。然后,在PHP代码中所要做的就是将其指向localhost。

您可以通过执行以下操作来测试它(无需自动重新启动):

ssh -L 3306:localhost:3306 user@domain.com

设置一个ssh密钥,这样您就不需要使用密码,并调整mysql系统上的.ssh/authorized文件,使其只允许用于端口转发。

有关ssh技巧的更多信息,请参阅Brian Hatch's关于SSH和端口转发的优秀系列文章。

票数 16
EN

Stack Overflow用户

发布于 2012-09-30 17:39:41

在SQL操作过程中,通道必须保持打开状态。以下来自RJMetrics的示例解释了:

以下是一般的SSH命令语法:

ssh -f -L bind-ip-address:bind-port:remote-ip-address:remote-port \
username@remote-server [command] >> /path/to/logfile

下面是如何在两行PHP代码中安全地建立远程数据库连接:

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

我们使用shell_exec()函数创建具有60秒打开窗口的通道,然后使用mysqli_connect()函数通过转发的端口打开数据库连接。注意,我们必须在这里使用"mysqli“库,因为mysql_connect()不允许我们指定端口,并且mysql_*函数已被弃用。

sleep 60:当谈到隧道连接时,我们基本上有两种选择:始终保持连接打开,或者根据需要打开并关闭连接。我们倾向于后者,因此我们在建立隧道时不指定-N选项,这将使隧道保持打开状态,直到手动终止进程(不利于自动化)。因为没有指定-N,所以一旦它的SSH会话没有任何用途,我们的隧道就会自动关闭。这是理想的行为,除了在创建隧道时和通过隧道建立并运行MySQL连接之间的几秒钟之外。为了在此期间为我们赢得一些时间,我们在隧道创建时发出无害的sleep 60命令,它基本上为我们赢得了60秒,以便在隧道关闭之前让其他东西通过隧道。只要在该时间范围内建立了MySQL连接,我们就都设置好了。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/309615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档