SSH tunnel: local => gateway => Сервер MySQL
Мне нужно получить доступ к базе данных MySQL на удаленном сервере в моей лаборатории. Сервер доступен только после входа на сервер шлюза в удаленной сети:
local server => gateway server => MySQL server.
Я могу использовать ssh для шлюза, используя порт 24222.
Я использую модуль PERL DBI. Это то, что я использую для подключения, когда я нахожусь в лаборатории:
my $host="1.2.3.4";
my $database="dbname";
my $user="user";
my $pw="pass";
my $table="table";
Я предполагаю, что мне нужно настроить туннель через сервер шлюза на сервер базы данных. Как мне это сделать? Если база данных MySQL была на шлюзе, я мог бы открыть туннель следующим образом:
$ ssh -f [email protected] -L 3307:127.0.0.1:3306 -N
Как я могу изменить это для туннеля через открытый порт 24222 на шлюзе через сервер MySQL на 1.2.3.4?
UPDATE:
Используя ответ @anttir, я получил его для работы следующим образом.
-
Настройте туннель:
$ ssh -fN -p 24222 [email protected] -L 3307:1.2.3.4:3306
-
Настройте переменные script:
my $host="127.0.0.1";
my $port = 3307;
Ответы
Ответ 1
С помощью команды:
$ ssh -f [email protected] -L 3307:1.2.3.4:3306 -N
Это означает, что все подключения к локальному клиенту 3307 клиента будут перенаправлены через туннель SSH на шлюз, а затем подключены к хосту 1.2.3.4 к порту 3306.
edit: Если SSH находится на порту 24222, то
$ ssh -f [email protected] -p 24222 -L 3307:1.2.3.4:3306 -N
Ответ 2
Использование туннеля:
ssh -f [email protected] -L 3307:1.2.3.4:3306 -N
вы сможете подключиться к базе данных на локальном порту 3307
Ответ 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