Подключение MySQL через туннель SSH - как указать другой сервер MySQL?
У меня есть ~ 50 баз данных, настроенных для разных имен хостов, с требованием подключения к ним через туннель SSH.
Например:
Мне удалось создать туннель, используя autossh (веб-сервер под управлением Debian), но я не могу понять, как подключиться к определенному имени хоста MySQL "за" туннелем SSH.
Ввод lsof -i -n | egrep '\<ssh\>'
подтверждает, что туннель работает (отправляет порт 3307 на порт 3306 ssh.example.com)
Поэтому, когда я пытаюсь mysql -h 127.0.0.1 -P 3307
, я получаю Connection отказано. Не слишком странно, так как это не сервер MySQL.
Мой вопрос вам, ребята:
Как указать хост mysql1.example.com
ПОСЛЕ создания туннеля SSH? Я пробовал искать везде, но, похоже, не понимаю.
Ответы
Ответ 1
Решил! Дело в том, чтобы подключиться к правильному серверу при создании самого туннеля - должно было видеть, что он приходит.
ssh -f [email protected] -L 3307:mysql1.example.com:3306 -N
Тогда mysql -h 127.0.0.1 -P 3307
работал по назначению.:)
Ответ 2
У меня есть хороший блог о том, как подключиться к MySQL, используя SSH-туннель. Это очень хорошо объяснено здесь.
Команда для подключения к туннелю SSH:
ssh -L [listening port]:[REMOTE_MYSQL_HOST]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_HOST]
Команда для подключения к MySQL:
localhost:[listening port]
Ответ 3
Если у вас нет прямого доступа к mysql-server
, вы используете jump-server
.
На вашем компьютере вы подключаетесь (ssh) к серверу перехода и оттуда вы подключаетесь к своему mysql-server
.
Этого можно избежать, используя ssh- tunneling
.
Предположим, что ваш
jump server is `jump-ip`
mysql server is `mysql-ip`
your machine is `machine-ip`
Просто откройте ssh client (Putty в windows или терминале в linux/ios).
Тип:
ssh -L [local-port]:[mysql-ip]:[mysql-port] [jump-server-user]@[jump-ip]
После этого вы можете использовать localhost
и local-port
для прямого доступа к mysql-серверу на удаленном компьютере.
Eg. Ваш Jdbc-url для доступа к базе данных mysql в этом случае будет
jdbc:mysql://localhost:[local-port]/[database-name]
Ответ 4
Я создал туннель для БД с помощью этой команды
ssh -L 10000:localhost:3306 [email protected]<ip addess to connect DB> -N -f
-L - это локальный хост-порт, который определяется пользователем. u может предоставить любой номер порта.
от 0 до 65535. От 0 до 1023 зарезервированы.
используете ли вы аутентификацию на основе ключа на сервере, вы должны
укажите такой ключ.
ssh -i <path of the private key> -L 10000:localhost:3306 [email protected]<ip addess to connect DB> -N -f