SSH-туннель через MySQL Workbench

SSH-туннель через MySQL Workbench

Мой новый продакшн-сервер виден только через двойной туннель ssh. Я могу добратьсяtargetHostчерез консоль Ubuntu 14.04 просто выполняя команду ssh targetHostи затем выполняя mysql cli на удаленной машине, но я хотел бы получить доступ к базе данных MySQL через gui Workbench. Как настроить соединение в Workbench, чтобы добиться этого?

Мой.ssh/config:

Host targetHost,  firewallHost
    User username
    IdentityFile /home/michalszulc/.ssh/id_rsa

Host targetHost
    proxycommand ssh -W %h:%p firewallHost

Host firewallHost
    hostname firewallHost.example.com
    port 2201
    passwordauthentication no
    controlmaster auto
    controlpath ~/

Host targetHost
    Hostname 123.123.123.123

решение1

Процесс простой. Создайте новое подключение и выберите метод подключения Стандартный TCP/IP через SSH. Значения для сервера SSH, который предоставляет туннель:

  • Имя хоста SSH: адрес сервера, который создает туннель SSH (сервер SSH и MySQL могут иметь один и тот же хост или один и тот же сетевой адрес, это будет зависеть от конфигурации).
  • Имя пользователя SSH: имя пользователя на сервере SSH.
  • Пароль SSH: Пароль пользователя на сервере SSH (если настроен режим аутентификации по паролю).
  • Файл ключа SSH: файл, содержащий закрытый ключ для аутентификации на сервере, если вы включили PasswordAuthenticationполитику на сервере SSH, имеет значение no).

Значения для подключения к СУБД MySQL.

  • MySQL Hostname: Адрес хоста, на котором MySQL запускает службу, относительно сервера SSH. Если служба SSH и MySQL запущена на одном хосте, то восточное значение — localhost или 127.0.0.1, поскольку после установки соединения через туннель служба MySQL прослушивает запросы от localhost (в зависимости от значения, установленного в директиве bind_adressMySQL).
  • Порт сервера MySQL: порт подключения MySQL, как правило, 3306.
  • Имя пользователя MySQL: имя пользователя, под которым он будет подключаться к MySQL, т. е. он должен быть действительным пользователем MySQL и иметь авторизацию для подключения через туннель.
  • Схема по умолчанию: эквивалентна SQL USE.

решение2

Не ясно, если мы правильно настроим. Поэтому я предполагаю, firewallhostчто хост доступен из вашего Workbench. Поэтому необходимо создать открытый порт на этом сервере, который может получить доступ к «реальному» серверу mysql за этим брандмауэром.

Это вполне нормально, если вы настроите постоянный ssh-туннель на firewallhost. Это делается так наfirewallhost

ssh -L localhost:33060:localhost:3306 someshelluser@databasehost

Это создает туннель openssh для localhost (не общедоступный ни на одной сетевой карте) на порту 33060 (или любом другом свободном порту), firewallhostкоторый в свою очередь соединен через этот туннель с портом 3306 (опять же на localhost, но на машине databasehost), поскольку он подключен как someshelluser на databasehost.

И теперь вы можете подключиться с помощью Workbench:

  • Имя хоста SSH:firewallhost
  • Имя пользователя SSH: какой-то допустимый пользовательfirewallhost
  • Пароль SSH: ваш пароль для действительного пользователя
  • Файл ключа SSH: альтернатива файлу ключа

  • Имя хоста MySQL: localhost(так как мы открыли туннель на firewallhostлокальном хосте)

  • Порт сервера MySQL: 33060
  • Имя пользователя MySQL: ваш пользователь MySQL

Чтобы туннель ssh был firewallhostпостоянным, вы можете запустить его там следующим образом с помощью ключевого файла (для доступа к databasehost) и отсоединенного процесса через экран. Это можно поместить в ваш rc.local или что-то еще, что вы используете в firewallhost.

screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost

Вы должны просто «представить», что такой туннель ssh может «передавать» любой поток портов с одной машины на другую, открывая «новый» порт на машине, на которой вы создаете этот туннель ssh (здесь firewallhost). Это можно сделать даже на публичной сетевой карте firewallhost, но вы хотите сделать это на локальном хосте, так как вы не хотите выставлять свой порт mysql на всеобщее обозрение ;)

ОБНОВЛЯТЬ:

Хорошо, поскольку у вас нет прямого доступа к firewallhostсозданию постоянного туннеля, попробуйте другой способ. Вы сказали, что можете подключиться с помощью proxycommand. Поскольку вы написали это в строке, а не как опцию '-o', я предполагаю, что это есть в вашем ssh_config.

Если ваш ssh_config выглядит так:

Host server
    Hostname mysqlserver.example.org
    ProxyCommand ssh -W %h:%p firewallhost.example.org

Тогда вы можете попробовать следующее:Имя хоста SSH' в workbench. При возможности вам разрешается передавать параметры ssh с ним. Я не проверял, но это не является необычным для приложений, чтобы передавать содержимое полей Hostname прямо в вызов ssh.

Имя хоста SSH:

-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org

Это должно привести вас к вашему mysqlserver через ваш firewallhost. Отсюда ваши настройки mysql могут быть использованы так, как если бы вы напрямую подключались к mysqlserver, как ожидает workbench.

ОБНОВЛЕНИЕ2:

Как вы написали, вы находитесь на той же машине (Ubuntu 14), которая может подключиться к вашей базе данных mysql за firewallhost, вам просто нужно использовать те же значения в workbench, которые вы используете в консоли. Workbench будет использовать ваш .ssh/config, если вы вызовете workbench с тем же пользователем, для которого предназначен .ssh/config.

Окончательно:

Имя хоста SSH будет просто «targetHost», где proxycommand из вашего .ssh/config будет туннелировать вас к «targetHost» через «firewallHost». Имя пользователя SSH будет «username» (снова из .ssh/config).

Имя хоста MySQL должно быть localhost и порт 3306 - это должно быть точно так же, как вы делаете при доступе к 'targetHost' по ssh, как вы написали в своем вопросе. Потому что workbench будет использовать эти значения после(!) подключения по ssh.

Связанный контент