SSH 从 PHP 绑定本地端口

SSH 从 PHP 绑定本地端口

PHP 代码
我有一个开发环境,正在尝试访问远程数据库。这是我使用的代码:

$dbhost = '127.0.0.1:3307';
$dbuser = 'mydbuser';
$dbpassword = 'mydbpassword';
$dbdatabase = 'mydatabase';
$db=mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);

我收到此错误:

[error] [client 127.0.0.1] PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)



为了使其正常工作,我尝试从我的常规用户帐户(jzumbrum)进行 SSH,如下所示:

ssh -f -L 3307:localhost:3306 [email protected] sleep 10 >> /var/log/apache2/sshlog

问题
有哪些命令可以验证 ssh 端口绑定是否正确工作?

答案1

您的 PHP 消息表明您正在尝试通过 unix 套接字连接到 MySQL,而不是通过本地主机接口上的网络。请再次检查您的配置。

你可以打开另一个终端并执行 来检查你的 SSH 端口转发telnet localhost 3307。如果隧道已启动,你应该会得到某种响应。

答案2

该错误消息表明 PHP 仍在尝试通过套接字而不是网络连接。除非您解决此问题,否则 SSH 解决方案将无法工作,因为它依赖于通过网络连接。

PHP 这样做的原因有很多,包括“SQL 安全模式”和 PHP MySQL 库覆盖某些默认值(如“localhost”)。其中一些记录在mysql_connect() 手册页

我在代码中看到的最大问题是您尝试连接到 MySQL,127.0.0.1但使用 SSH 连接到remoteserver.com。您的 $dbhost 行可能应该用remoteserver.com而不是127.0.0.1

答案3

我通常会做这样的事情来验证端口转发是否有效:

在远程机器(使用远程数据库)上执行简单服务器:

remote$ echo "hello" | nc -l -p 2222

在本地机器上启动端口转发:

local$ ssh -L 1234:localhost:2222 [email protected]

并尝试连接到简单服务器:

local$ nc localhost 1234

如果您看到“hello”,则表示端口转发按预期工作。

相关内容