我的数据库位于远程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)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