Подключиться к базе данных через два туннеля ssh в IntelliJ IDEA

Я пытаюсь добавить базу данных postgresql в качестве источника данных в IntelliJ IDEA Ultimate.
Я уже работал с источником данных через ОДИН туннель ssh. Но теперь сервер базы данных находится за брандмауэром, который принимает только ssh-соединения от управляющего сервера. Единственный способ получить доступ к серверу db - через сервер управления.

Поэтому я (или IntelliJ) должен подключиться через ssh к этому серверу, а затем, используя другого пользователя, туннелировать через ssh на сервер базы данных.

Все понятно? :-D

Проблема в том, что IntelliJ предлагает настроить только один туннель ssh. Но после первого туннеля мне нужно использовать второй, чтобы наконец подключиться к серверу базы данных ... Есть идеи?

Спасибо заранее.

введите описание изображения здесь


person zypro    schedule 27.02.2019    source источник


Ответы (2)


Я бы создал локальный порт для переадресации с помощью OpenSSH или любого подобного инструмента. который будет перенаправлять 127.0.0.1:2222 на firewall:22 через сервер управления, а затем использовать конфигурацию туннеля IntelliJ IDEA для 127.0.0.1:2222, как если бы вы это делали с одним туннелем.

ssh -L 127.0.0.1:2222:firewall:22 <management server>

Вы можете настроить внешний инструмент для автоматизации этого процесса. . На компьютере с Windows у меня был большой опыт работы с Bitvise SSH Client для создания туннелей / переадресации портов и запускать их автоматически.

person CrazyCoder    schedule 27.02.2019
comment
Спасибо. Брандмауэр не имеет реального адреса (оборудования), соединения просто проходят через него. Итак, если я перенаправляю порт своего локального хоста на сервер управления, я только там, но не на сервере базы данных? Где и как адресовать ssh-соединение с самим сервером базы данных? - person zypro; 27.02.2019
comment
Затем вы просто переносите переадресацию через сервер управления на сервер базы данных и подключаетесь к базе данных как localhost, который будет перенаправлен на сервер базы данных через сервер управления и брандмауэр. - person CrazyCoder; 27.02.2019
comment
Значит, мне нужно добавить переадресацию порта на управляющий сервер, верно? - person zypro; 27.02.2019
comment
Да, судя по тому, что вы описали, это правильный путь. - person CrazyCoder; 27.02.2019

ssh поддерживает ваш сценарий из коробки. Уловка состоит в том, чтобы создать две записи в вашем ~/.ssh/config файле для сервера управления, одну для your-user и одну для special-user. Затем используйте ProxyJump, чтобы связать ваши связи вместе.

Итак, начните с настройки раздела Host для сервера управления и пользователя, к которому вы подключаетесь со своего локального компьютера:

Host mgmt
    HostName management.server.com
    User your-user
    ...
    

Затем настройте Host для пользователя на сервере управления, который будет входить в систему как:

Host mgmt-special-user
    HostName management.server.com
    User special-user

На этом же хосте добавьте директиву, чтобы сообщить ssh о создании туннеля к вашей БД:

    LocalForward <free-port-on-your-box> <db-ip-or-host>:<db-port>

Затем сообщите ssh, что этот хост доступен с первого хоста:

    ProxyJump mgmt

Теперь вы можете ssh mgmt-special-user со своего локального компьютера. ssh автоматически перескочит через mgmt хост, а также автоматически расширит туннель через mgmt и обратно на ваш локальный компьютер.

ProxyJump (-J) был добавлен в OpenSSH 7.3 (выпущен в 2016 году).

person Roger Dahl    schedule 13.11.2020