SSH隧道:local => gateway => MySQL服务器

时间:2012-09-19 12:28:53

标签: mysql linux ssh-tunnel

我需要在我的实验室访问远程服务器上的MySQL数据库。只有登录到远程网络上的网关服务器后才能访问服务器:

local server => gateway server => MySQL server.

我可以使用端口24222 ssh到网关。

我正在使用PERL DBI模块。这是我在实验室时使用的连接方式:

my $host="1.2.3.4";
my $database="dbname";
my $user="user";
my $pw="pass";
my $table="table";    

我想我必须通过网关服务器建立到数据库服务器的隧道。我该怎么做呢?如果MySQL数据库在网关上,我可以像这样打开一个隧道:

$ ssh -f user@gateway -L 3307:127.0.0.1:3306 -N 

如何将其修改为通过网关上的开放端口24222隧道传输到1.2.3.4上的MySQL服务器?


更新:

使用@ anttir的答案我按照以下方式开始工作。

  1. 设置隧道:

    $ ssh -fN -p 24222 user1@11.12.13.14 -L 3307:1.2.3.4:3306
    
  2. 设置脚本变量:

    my $host="127.0.0.1";
    my $port = 3307;
    

3 个答案:

答案 0 :(得分:20)

使用命令:

$ ssh -f user@gateway -L 3307:1.2.3.4:3306 -N 

这表明与客户端localhost 3307的所有连接都将通过SSH隧道转发到网关,然后连接到主机1.2.3.4到端口3306。

编辑:如果SSH在端口24222上,那么

$ ssh -f user@gateway -p 24222 -L 3307:1.2.3.4:3306 -N 

答案 1 :(得分:3)

如果您需要使用多个跃点来访问MySQL服务器,我首先建议创建.ssh / config文件并使用ProxyCommand,如下所示:

  Host gateway
     HostName example.com
     User foo
     Port 22
     IdentityFile ~/.ssh/id_rsa.pub

  Host mysql_access_server
      HostName example-web.com
      Port 22
      User foo
      ProxyCommand ssh -A gateway nc %h %p

然后像这样转发端口:

ssh -f mysql_access_server -L 3309:sqlmaster.example.com:3306 -N

然后您可以像这样访问MySQL服务器:

mysql --user=root --host=127.0.0.1 --password=root --port=3309 some_db_name

答案 2 :(得分:2)

使用隧道:

ssh -f user@gateway -L 3307:1.2.3.4:3306 -N 

您将能够连接到localhost端口3307上的数据库