【发布时间】:2012-06-08 07:56:02
【问题描述】:
有什么方法可以使用 PDO 和 SSH 隧道连接到数据库,并且不要像下面的主题那样在命令行执行任何代码?
Zend_Db: How to connect to a MySQL database over SSH tunnel?
提前感谢您的回答。
【问题讨论】:
有什么方法可以使用 PDO 和 SSH 隧道连接到数据库,并且不要像下面的主题那样在命令行执行任何代码?
Zend_Db: How to connect to a MySQL database over SSH tunnel?
提前感谢您的回答。
【问题讨论】:
我可以使用ssh2_tunnel、socket_create_listen() 和pcntl_fork 的组合来完成此操作。基本上隧道是我们想要用来连接到 MySQL 机器上的端口的东西,但是因为 PDO 不支持通过套接字连接,我们必须通过 socket_create_listen 在专用的 php fork 上创建一个端口,它只是从到 ssh 隧道的 unix 套接字。
PDO (php main proc) -> random socket port on 127.0.0.1 -> data proxy (php fork proc) -> ssh2_tunnel resource -> ssh server -> mysql process.
【讨论】:
如果不在单独的进程中调用 ssh 隧道,这意味着您必须为脚本的每次调用创建一个新隧道 - 并且您不能共享另一个实例创建的隧道,因为您不知道它何时创建将终止。因此,除了连接开销之外,您还需要管理一个本地套接字池。
简短的回答是不可行。
更长的答案是,您可以在 PHP 中启动守护程序/长时间运行的进程,但 there are a few caveats。因此,如果您可以使用程序执行功能并使用命令行工具访问一组 POSIX 工具,那么这是可能的。如果您可以设置一个密钥对(使用 necryted 私钥)以避免将 I/O 解析到程序以在正确的位置注入密码(或使用类似的东西),那么实现这一点会简单得多'expect' 来处理它)。
【讨论】:
如果你有带ssh2扩展名的php,应该可以的。
【讨论】: