PHP - 到 MySQL 的 SSH 隧道

Posted

技术标签:

【中文标题】PHP - 到 MySQL 的 SSH 隧道【英文标题】:PHP - SSH tunnel to MySQL 【发布时间】:2018-02-22 02:51:49 【问题描述】:

如何制作自毁的SSH隧道来访问另一台服务器上的mysql

目前我的代码如下:

exec('ssh -fNg -L 4343:127.0.0.1:3306 user@remotehost.com');

$mysqli = new mysqli('127.0.0.1', 'dbuser', 'dbpass', 'dbname', '4343');

这里的问题是执行 exec 命令后脚本挂起。应该怎样 我执行脚本的其余部分,脚本完成后如何关闭后台进程?

【问题讨论】:

尝试shell_exec shell_exec 将所有输出流作为字符串返回。 exec 默认返回输出的最后一行 这里的问题是我不需要 exec/shell_exec 的任何输出。想法是生成持有 SSH 隧道的后台进程并“将其移开”以供 php 脚本执行。 试试exec('ssh -fNg -L 4343:127.0.0.1:3306 user@remotehost.com . &'); 【参考方案1】:

所以经过一些研究 - 解决方案是在命令末尾添加> /dev/null 2>/dev/null &

完整的工作示例行是:

exec('ssh -fNg -L 4343:127.0.0.1:3306 user@remotehost.com > /dev/null 2>/dev/null &');

【讨论】:

以上是关于PHP - 到 MySQL 的 SSH 隧道的主要内容,如果未能解决你的问题,请参考以下文章

通过 php 中的 ssh 连接隧道请求

使用 C# 建立 MySQL 连接的 SSH 隧道

无法使用 PHP 函数 ssh2_tunnel 创建 SSH 隧道

SSH隧道:本地=>网关=> MySQL服务器

我想简化 SSH 隧道以执行 MySQL 转储并将文件 SCP 到本地计算机

通过 SSH 隧道的 mySQL 连接字符串,无需密码