开发者社区 问答 正文

通过PHP中的SSH连接到MySQL服务器?mysql

我的数据库位于远程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()); 我收到错误消息“ mysqli_connect()期望参数6为字符串,给定资源”。我该如何解决?

展开
收起
保持可爱mmm 2020-05-17 17:20:45 1368 分享 版权
1 条回答
写回答
取消 提交回答
  • SSH隧道解决方案 设置到MySQL数据库服务器的SSH隧道(最好是通过Jumpbox以获得安全性)。

    (A)GUI工具 根据您的要求,您可以使用具有内置SSH隧道支持的GUI MySQL客户端(例如SequelPro),使用Visual Studio代码 转发端口/创建SSH隧道或使用PuTTY设置端口转发。

    有一个名为Secure Pipes的macOS GUI ssh隧道工具,您可能也会发现它很有用。

    (B)命令行 步骤1。

    ssh -fNg -L 3307:10.3.1.55:3306 username@ssh-jumpbox.com 这里的关键是'-L'开关,它告诉ssh我们正在请求本地端口转发。我选择使用上面的端口3307。现在,本地计算机上定向到该端口的所有流量都将通过我的ssh客户端 “端口转发” 到在address主机上运行的ssh服务器ssh-jumpbox.com。10.3.1.55:3306在这种情况下,Jumpbox ssh服务器将代表您解密流量并建立与MySQL数据库服务器的网络连接。MySQL数据库服务器会看到来自Jumpbox内部网络地址的连接。

    本地端口转发语法 语法有些棘手,但可以将其视为:

    <local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> username@ssh_proxy_host.com 如果您对其他开关感兴趣,它们是:

    -f(转到后台) -N(不执行远程命令) -g(允许远程主机连接到本地转发的端口)

    私钥身份验证,在上面添加(-i)开关:

    -i /路径/到/私钥

    第2步。

    告诉您的本地MySQL客户端通过您机器上的本地端口3307(-h 127.0.0.1)通过SSH隧道进行连接,该端口现在将通过您在步骤1中建立的SSH隧道转发发送给它的所有流量。

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

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

    注意: 我不建议直接通过隧道传输到您的数据库服务器-使数据库服务器可以直接从Internet访问是巨大的安全责任。将隧道目标地址设为Jumpbox / Bastion主机的Internet地址(请参阅步骤1中的示例),并将数据库目标为远程网络上数据库服务器的内部 IP地址。SSH将完成其余的工作。

    第三步

    现在,使用以下命令连接您的PHP应用程序:

    来源:stack overflow
    2020-05-17 17:22:24
    赞同 展开评论