Tunel SSH: local = > gateway = > MySQL server

Potrzebuję dostępu do bazy danych MySQL na zdalnym serwerze w moim laboratorium. Serwer jest dostępny tylko po zalogowaniu się do serwera bramy w sieci zdalnej:

local server => gateway server => MySQL server.

Mogę ssh do bramki używając portu 24222.

Używam modułu PERL DBI. To jest to, czego używam do łączenia, gdy jestem w laboratorium:

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

Wyobrażam sobie, że muszę ustawić tunel przez serwer bramy do serwera bazy danych. Jak mam to zrobić? Jeśli MySQL bazy danych były na bramce, mogłem otworzyć taki tunel:

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

Jak mogę zmodyfikować to, aby tunelować przez otwarty port 24222 w bramie przez serwer MySQL w wersji 1.2.3.4?


Aktualizacja:

Korzystając z odpowiedzi @ anttir mam go do działania w następujący sposób.

  1. Ustaw tunel:

    $ ssh -fN -p 24222 [email protected] -L 3307:1.2.3.4:3306
    
  2. Ustaw zmienne skryptu:

    my $host="127.0.0.1";
    my $port = 3307;
    
Author: terdon, 2012-09-19

3 answers

Z poleceniem:

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

Oznacza to, że wszystkie połączenia do klienta localhost 3307 będą przekazywane przez tunel SSH do bramy, a następnie podłączone do hosta 1.2.3.4 do portu 3306.

Edit: jeśli SSH jest na porcie 24222 to

$ ssh -f user@gateway -p 24222 -L 3307:1.2.3.4:3306 -N 
 21
Author: Antti Rytsölä,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 15:49:04

Jeśli potrzebujesz użyć wielu chmieli, aby uzyskać dostęp do serwera MySQL, najpierw polecam utworzyć .plik SSH / config i użyj ProxyCommand w ten sposób:

  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

Następnie Port do przodu tak:

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

Następnie możesz uzyskać dostęp do serwera MySQL w następujący sposób:

mysql --user=root --host=127.0.0.1 --password=root --port=3309 some_db_name
 5
Author: Mihkel Selgal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-22 09:15:09

Korzystanie z tunelu:

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

Będziesz mógł połączyć się z bazą danych na porcie localhost 3307

 2
Author: G. Allen Morris III,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 15:49:16