PDO和SSH2隧道

时间:2011-08-06 18:30:07

标签: php mysql ssh pdo

有没有办法使用PDO和SSH隧道连接到数据库,并且不在命令行执行任何代码,如下面的主题所述?

Zend_Db: How to connect to a MySQL database over SSH tunnel?

提前感谢您的回答。

3 个答案:

答案 0 :(得分:2)

我可以使用ssh2_tunnelsocket_create_listen()pcntl_fork的组合来完成此操作。基本上隧道是我们想要用来连接MySQL盒子上的端口的,但是因为PDO不支持通过套接字连接,我们必须通过socket_create_listen在专用的php fork上创建一个端口从unix套接字到ssh隧道的数据。

PDO (php main proc) -> random socket port on 127.0.0.1 -> data proxy (php fork proc) -> ssh2_tunnel resource -> ssh server -> mysql process.

答案 1 :(得分:1)

如果不在单独的进程中调用ssh隧道,这意味着您必须为每次调用脚本创建一个新隧道 - 并且您不能共享由另一个实例创建的隧道,因为您不知道何时该隧道将终止。因此,除了连接开销之外,您还需要管理本地套接字池。

简短的回答是,这是不可行的。

更长的答案是,您可以从PHP中there are a few caveats启动守护进程/长时间运行的进程。因此,如果您可以使用程序执行功能并使用命令行工具访问一组POSIX工具,那么它是可能的。如果你可以设置一个密钥对(使用一个未加密的私钥)来实现这一点要简单得多,以避免必须解析程序的I / O以在正确的位置注入密码(或使用类似的东西) 'expect'来处理它。)

答案 2 :(得分:0)

如果你的php有ssh2扩展名,那么应该可以。

http://php.net/manual/en/function.ssh2-tunnel.php