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

21 php mysql ssh

我读了一篇关于这个主题的帖子,我也想做同样的事,

我有远程linux机器上的数据库,我想使用ssh和php函数连接,(我目前正在使用ssh2库)我尝试使用mysql_connect,但它让我无法访问(虽然我已经授予权限)当我尝试使用此功能:

$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());
Run Code Online (Sandbox Code Playgroud)

我得到错误"mysqli_connect()期望参数6是字符串,资源给定",任何人都可以请帮助我

Ton*_*ski 39

试试这个:

步骤1.

在remotehost.com上建立到MySQL服务器的隧道SSH连接

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

这里的关键是-L,它表示我们正在进行本地端口转发.

本地端口Frowarding语法
语法有点棘手但可以看作:

<local_port>:<server_addr_remote_end>:<server_port_remote_end> myuser@proxy.com 
Run Code Online (Sandbox Code Playgroud)

如果您对其他交换机感兴趣,它们是:-f(转到后台)-N(不执行远程命令)-g(允许远程主机连接到本地转发端口)

公钥认证,添加(-i)切换到上面:

-i/path/to/public/key

第2步.

现在告诉本地MySQL客户端通过步骤1中的SSH隧道设置连接到您计算机上的端口3307(通过ssh转发,连接到remotehost.com上的'127.0.0.1:3306').

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

客户端和服务器之间的数据交换现在通过加密的ssh连接发送,并且是安全的.

第3步.

现在将您的PHP应用程序连接到:

<?php
      $smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
      mysql_select_db( "db", $smysql ); 
?>
Run Code Online (Sandbox Code Playgroud)

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

GUI工具

根据您的要求,另一种方法是使用具有SSH隧道支持的GUI MySQL客户端,例如http://www.sequelpro.com/或使用PuTTY设置端口转发.

更新1 今天,我回顾了一个可行的替代macOS GUI ssh隧道工具,称为安全管道,您可能会发现它很有用.


Dav*_*d Z 1

根据文档,最后一个参数应该是套接字或管道名称,例如“/var/run/mysql/mysql.sock”。由于您没有使用 UNIX 套接字进行连接,因此这不适用于您...因此请尝试将其忽略。