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 


存在哪些命令来validationssh端口绑定是否正常工作?

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

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

该错误消息表明,PHP仍然尝试通过套接字而不是通过networking进行连接。 您的SSH解决scheme将无法正常工作,直到您解决此问题,因为它依靠通过networking连接。

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

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

我通常做这样的事情来validation端口转发的工作原理:

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

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

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

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

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

 local$ nc localhost 1234 

如果您看到“hello”,意味着端口转发按预期工作。