在PHP中通过SSH连接到MySQL服务器

我读了一篇关于这个话题的post,我也想这样做,

我有我的数据库在远程Linux机器上,我想连接使用SSH和PHP funcitons,(我目前正在使用ssh2库),我试过使用mysql_connect,但它让我无法访问(虽然我已经授予权限),当我尝试使用这个function:

$connection = ssh2_connect('SERVER IP', 22); ssh2_auth_password($connection, 'username', 'password'); $tunnel = ssh2_tunnel($connection, 'DESTINATION IP', 3307); $db = mysqli_connect('127.0.0.1', 'DB_USERNAME', 'DB_PASSWORD', 'dbname', 3307, $tunnel) or die ('Fail: '.mysql_error()); 

我得到错误“mysqli_connect()期望参数6是string,资源给予”,任何人都可以请帮助我这个

尝试这个:

ssh -fNg -L 3307:127.0.0.1:3306 myuser@remotehost.com

mysql -h 127.0.0.1 -P 3307 -u dbuser -p db

 <?php $smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "PASS" ); mysql_select_db( "db", $smysql ); ?> 

感谢Chris Snyder在http://chxo.com/be2/20040511_5667.html上的精彩文章;

根据文档 ,最后一个参数应该是一个套接字或pipe道名称,如'/var/run/mysql/mysql.sock'。 由于你没有使用UNIX套接字进行连接,所以不适用于你…所以试着把它留下。

即使我通过做根本凭据和公共私人密钥对ssh试图它,但它允许我conect通过命令行,但不是通过PHP代码。 我也尝试通过创build隧道(通过使用ssh2函数),从PHP代码(系统,执行等)运行shell命令,没有任何工作。 最后,我尝试了ssh2函数来执行shell命令,最后它工作:)这里是代码,如果它可以帮助你:—-

 $connection = ssh2_connect($remotehost, '22'); if (ssh2_auth_password($connection, $user,$pass)) { echo "Authentication Successful!\n"; } else { die('Authentication Failed...'); } $stream=ssh2_exec($connection,'echo "select * from zingaya.users where id=\"1606\";" | mysql'); stream_set_blocking($stream, true); while($line = fgets($stream)) { flush(); echo $line."\n"; } 

它为我工作,如果想专门使用PHP函数试试这个。

确保您连接的用户名和密码具有正确的主机名权限。 我相信你可以使用'%'作为通配符。 另外,如果你连接到远程机器(我假设你是如果你试图ssh进入它)不在你的本地networking上,你将不得不转发你的路由器上的服务器是外部stream量的端口是能够连接到它。

http://www.lanexa.net/2011/08/create-a-mysql-database-username-password-and-permissions-from-the-command-line/

不幸的是,由PHP提供的ssh2隧道似乎无法处理远程mysql连接,因为您不能指定本地端口进行隧道(只能与端口22或远程服务器运行的任何ssh端口一起使用)。 我的解决scheme是通过exec()运算符打开隧道,并像往常一样从那里连接:

 exec('ssh -f -L 3307:127.0.0.1:3306 user@example.com sleep 10 > /dev/null'); $mysqli = new mysqli('127.0.0.1', 'user', 'password', 'database', '3307');