通过ssh隧道访问mysql

我的机器可以连接服务器A,A可以访问服务器B上的mysql,但是我的机器不能访问B,所以我需要建立一个我本地机器到服务器A的ssh隧道来访问服务器B上的mysql。

理一下思路:

1.我要ssh的服务器是111.112.113.114,端口是5122,账户名是wz。

2.然后我ssh到111.112.113.114之后要访问的mysql服务器地址是:192.168.3.51,端口号是3306 。

3.我打算把这个ssh隧道绑定到我本地的3307端口。

好了,搞明白之后我们开始写命令:

andy@AndyMacBookPro:/usr/local/webdata/andy/shop/jd/job$ ssh -fN -L3307:192.168.3.51:3306 -p5122 wz@111.112.113.114
wz@111.112.113.114's password: andy@AndyMacBookPro:/usr/local/webdata/andy/shop/jd/job$ lsof -i:3307 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 1114 andy 5u IPv6 0xaed4b8ceeaf7e51 0t0 TCP localhost:opsession-prxy (LISTEN) ssh 1114 andy 6u IPv4 0xaed4b8cfd6dcef1 0t0 TCP localhost:opsession-prxy (LISTEN) andy@AndyMacBookPro:/usr/local/webdata/andy/shop/jd/job$

可以看到最后已经建立了两个隧道,命令成功!

其中ssh的语法是这样的:

ssh -fN -L(要绑定到的本地端口):(服务器B的Host):(服务器B上要访问的端口号) -p(服务器A的端口,默认为22) (服务器A的账户):(服务器A的Host)

感谢以下资料:
http://blog.csdn.net/nrc_douningbo/article/details/18618311

之后我们就可以写php代码来通过ssh隧道来访问那台无法直接连接的mysql服务器了,我这里使用的是medoo这个好东西:

ini_set('memory_limit','256M');

error_reporting(1);
set_time_limit(0);

$medoo = '/usr/local/webdata/github/Medoo/medoo.php';
require $medoo;
$database = new medoo([
    'database_type' => 'mysql',
    'database_name' => 'monitor',
    'server' => '127.0.0.1',
    'username' => 'myname',
    'password' => 'mypassword',
    'port' => '3307',
]);

$database->query("set names utf8;");

$sql = 'show tables';
$data = $database->query($sql)->fetchall();
echo '<pre>';var_dump($data);exit;

经验证可以访问成功。另,以上的server如果写成localhost是会报错的,要设置为127.0.0.1才可以。

你可能感兴趣的:(mysql,ssh)