通过 SSH 连接到远程 MySQL 服务器需要在本地之间建立安全隧道机和 MySQL 数据库服务器。本指南概述了使用 PHP 设置 SSH 隧道和连接到数据库所涉及的步骤。
错误“mysqli_connect() 期望参数 6 为字符串,给定资源”当 mysqli_connect() 的第六个参数不是表示 MySQL 隧道的字符串时,会发生这种情况。要解决此问题,请将第六个参数更改为 ssh2_tunnel 函数的输出,如下所示:
<code class="php">$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, stream_get_contents($tunnel)) or die ('Fail: '.mysql_error());</code>
通过以下方式连接到 MySQL 服务器的推荐解决方案SSH是建立SSH隧道。以下是设置隧道的两个选项:
使用提供内置 SSH 隧道支持的 GUI MySQL 客户端,例如 Visual Studio Code 或 TablePlus。
使用以下命令设置本地端口转发:
<code class="bash">ssh -fNg -L 3307:10.3.1.55:3306 [email protected] </code>
建立隧道后,通过 PHP 脚本中的本地端口 (3307) 连接到 MySQL 服务器:
<code class="php"><?php $smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" ); mysql_select_db( "db", $smysql ); ?></code>
通过 Jumpbox 服务器建立隧道以防止将数据库服务器直接暴露到 Internet 至关重要。此外,请考虑使用 SSH 密钥身份验证代替密码身份验证以增强安全性。
以上是如何在 PHP 中通过 SSH 连接到 MySQL 服务器:故障排除和最佳实践的详细内容。更多信息请关注PHP中文网其他相关文章!