【发布时间】:2015-09-08 23:34:18
【问题描述】:
问题: 无法通过 SSH 从 apache 访问远程 MySQL
我的目标是通过 ssh 隧道使用 apache 和 tomcat 从 APP 服务器安全地访问数据库。 APP服务器(Linux)正在运行apache httpd、tomcat。 数据库服务器(Linux)正在运行 mysql 服务器(端口 3306)。 SSH 为用户设置: sshUser 在两台服务器上。 DB 上的 MySQL 已启动。
SSH 连接: 在 APP 服务器上,我以 sshUser 身份运行以下命令。 (sshUser是APP和DB服务器的登录用户)
ssh -p 22 -f -N -L 3307:localhost:3306 sshUser@DB_ip_address
然后我在APP服务器上启动了httpd和tomcat。
测试用例: 1.APP服务器(httpd)(localhost:3307)>(3306)数据库服务器(MySQL)失败: 在 APP 服务器上,在 apache 中,我运行 test.php 作为以下 php 代码
<?php
$db_host = "localhost:3307";
$db_name = "dbname";
$db_user = "dbuser";
$db_pass = "dbpassword";
GLOBAL $errors;
GLOBAL $successes;
$errors = array();
$successes = array();
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
GLOBAL $mysqli;
if(mysqli_connect_errno()) {
echo "Conn Error = " . mysqli_connect_error(); exit();
}else{
echo "Pass"; exit();
}
?>
错误信息: 警告:mysqli::mysqli(): (HY000/2005): Unknown MySQL server host 'localhost:3307' (1) in /$site_path/test.php on line 10, Conn Error = Unknown MySQL server host 'localhost:3307 ' (1) (使用 joomla 和 wordpress 也失败了)
APP server (tomcat) (localhost:3307)>(3306) DB server (MySQL) 好:
windows 8 (httpd) (localhost:3307)>(3307) APP server (3307)>(3306) DB server (MySQL) 好: 在 windows 8 客户端上,putty 目标是 APP 服务器,SSH 隧道设置转发端口 3307(源端口)localhost:3307(目标)。 如果我在 Windows 8.1 上从我的 apache 服务器运行相同的 test.php,它没有问题。 Joomla 也可以。 (配置如下)
windows 8 (tomcat) (localhost:3307)>(3307) APP server (3307)>(3306) DB server (MySQL) 好:
配置细节: APP服务器上: Tomcat 由“tomcat”用户启动 httpd 由“apache”用户启动 mysqld 由“root”启动 ssh 由“sshUser”启动 sshd 由“root”启动
在 /etc/passwd (APP server 和 DB server 相同) apache:x:48:48:Apache:/var/www:/sbin/nologin tomcat:x:501:501::/home/tomcat:/sbin/nologin
【问题讨论】:
-
这个问题可能最适合serverfault.com
-
$db_host="localhost:3307" 适用于 windows8,不适用于 Linux。由于 joomla 没有端口参数,我更改为默认端口。新问题:我在APP服务器上运行了一个Mysql。我将其更改为 3309。然后 ssh -f -N -L 3306:localhost:3306 sshUser@DB_IP。但是 joomla 总是转到本地的 Mysql,即 3309。dev.mysql.com/doc/refman/5.0/en/connecting.html“对于到 localhost 的连接,MySQL 使用 Unix 套接字文件,即使 --port 给出了端口号。”我更改为 ssh -p 22 -f -N -L 3306:127.0.0.1:3306 sshUser@DB_IP_address。在 php 中,更改 $db_host="127.0.0.1" 以使其工作。
-
我自己无法更改问题。但这确实与编程有关。代码需要解决非常微妙的 joomla 和 mysql 功能。 (在我之前的评论中描述)