gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:50:27 27 4
gpt4 key购买 nike

我的数据库位于远程 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 是字符串,给定资源”。我该如何解决这个问题?

最佳答案

SSH 隧道解决方案

为您的 MySQL 数据库服务器设置 SSH 隧道(通过 Jumpbox 代理以确保安全)。


(A) 图形用户界面工具

根据您的要求,您可以使用内置 SSH 隧道支持的 GUI MySQL 客户端,例如 Visual Studio Code Forwarding a port / creating SSH tunnel , TablePlus或使用 PuTTY设置本地端口转发。

在 macOS 上,我喜欢 Secure PipesTablePlus .


(B) 命令行

第 1 步。

ssh -fNg -L 3307:10.3.1.55:3306 username@ssh-jumpbox.com 

这里的关键是 '-L' 开关,它告诉 ssh 我们正在请求本地端口转发。

我已选择使用上面的端口 3307。我的 local 机器上指向此端口的所有流量现在都将通过我的 ssh 客户端“端口转发”到运行在主机地址 ssh-jumpbox.com.

Jumpbox ssh 代理服务器将代表您解密流量并与您的 MySQL 数据库服务器建立网络连接,在本例中为 10.3.1.55:3306。 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 /path/to/private-key

第 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 中的示例),并将数据库的目标设置为远程网络上数据库服务器的 internal IP 地址。 SSH 将完成剩下的工作。


第 3 步。

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

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

感谢 克里斯·斯奈德 伟大的 article详细介绍 MySQL 连接的 ssh 命令行隧道。

关于php - 在 PHP 中通过 SSH 连接到 MySQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/464317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com