无法通过SSH从apache访问远程MySQL

时间:2015-09-08 14:43:00

标签: php mysql apache ssh

问题: 无法通过SSH从apache访问远程MySQL

我的目标是通过ssh隧道使用apache和tomcat安全地从APP服务器访问数据库。 APP服务器(Linux)正在运行apache httpd,tomcat。 DB服务器(Linux)正在运行mysql服务器(端口3306)。 在两台服务器上为用户设置SSH:sshUser。启动数据库上的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):第10行的/$site_path/test.php中的未知MySQL服务器主机'localhost:3307'(1),Conn错误=未知MySQL服务器主机'localhost:3307 '(1) (使用joomla和wordpress也失败了)

  1. APP服务器(tomcat)(localhost:3307)&gt;(3306)数据库服务器(MySQL)很好:

  2. windows 8(httpd)(localhost:3307)&gt;(3307)APP服务器(3307)&gt;(3306)DB服务器(MySQL)是好的: 在Windows 8客户端上,putty目标是APP服务器,SSH隧道设置转发端口3307(源端口)localhost:3307(目标)。 如果我在Windows 8.1上从我的apache服务器运行相同的test.php,它没有问题。 Joomla也有效。 (配置如下)

  3. windows 8(tomcat)(localhost:3307)&gt;(3307)APP服务器(3307)&gt;(3306)DB服务器(MySQL)是好的:

  4. 配置细节: 在APP服务器上: Tomcat由“tomcat”用户启动 httpd由“apache”用户启动 mysqld由“root”启动 ssh由“sshUser”启动 sshd由“root”启动

    / etc / passwd中的

    (在APP服务器和数据库服务器上相同) 阿帕奇:X:48:48:的Apache:/无功/网络:/ sbin目录/ nologin的 Tomcat的:X:501:501 :: /家庭/ Tomcat的:/ sbin目录/ nologin的

2 个答案:

答案 0 :(得分:1)

localhost:3307不是有效的主机名。

http://php.net/manual/en/mysqli.construct.php

mysqli::__construct ([ string $host = ini_get("mysqli.default_host")
[, string $username = ini_get("mysqli.default_user") [, string $passwd
= ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket =
ini_get("mysqli.default_socket") ]]]]]] )
     

(...)

     

的宿主

     

可以是主机名或IP地址。 (...)

     

(...)

     

端口

     

指定尝试连接MySQL服务器的端口号。

答案 1 :(得分:0)

您必须将端口号作为参数添加到构造函数

$db_host="localhost";
$db_port=3307;
.....
new mysqli ( ....,$db_port);
....