有什么方法可以使用PDO和SSH隧道连接到数据库,并且不要在命令行中执行任何代码,就像下面的主题一样?PDO和SSH2隧道
Zend_Db: How to connect to a MySQL database over SSH tunnel?
预先感谢您的回答。
有什么方法可以使用PDO和SSH隧道连接到数据库,并且不要在命令行中执行任何代码,就像下面的主题一样?PDO和SSH2隧道
Zend_Db: How to connect to a MySQL database over SSH tunnel?
预先感谢您的回答。
而不调用一个单独的进程中的SSH隧道,这意味着你必须创建一个新的隧道为脚本的每次调用 - 因为你不能共享的另一个实例创建的隧道不知道什么时候会终止。因此,除了连接开销外,您还需要管理本地套接字池。
简而言之,这是不可行的。
较长的答案是您可以从PHP中启动守护进程/长时间运行进程,但there are a few caveats。因此,如果您可以使用程序执行功能并使用命令行工具访问一组POSIX工具,则可以。如果你可以设置一个密钥对(带有一个加密的私钥),以避免必须解析程序的I/O以在正确的位置注入密码(或者使用类似的东西'expect'来处理它)。
如果你的PHP扩展名是ssh2,那应该是可以的。
我能够使用ssh2_tunnel
,socket_create_listen()
和pcntl_fork
的组合来做到这一点。基本上隧道就是我们想用来连接到MySQL盒子上的端口,但是因为PDO不支持通过套接字连接,所以我们必须在专用的php分支上通过socket_create_listen
创建一个端口,只需将数据从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.
你能详细说明一下步骤吗? –