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 函数 ssh2_tunnel 创建 SSH 隧道