Как создать цепочку туннелей ssh в одной команде?

у нас есть сервер для подключения. Затем мы используем serverA для подключения к databaseB. Настройка, как это в Putty (windows):

Session1:


1. подключитесь к admin@serverA


2. настройте локальный порт туннеля 10022 на databaseB: 22


3. запустите 'vi'

Session2:


1. подключиться к admin@localhost:10022


2. настройка туннеля локальный порт 1521 к базе данных 1521


3. работать 'vi'

(vi используется для проведения сессии)

затем программа использует localhost: 1521 для подключения к базе данных.

интересно, если я могу сделать это в одной команде или пакетный файл в cygwin?
Обратите внимание, что я не могу открыть порт на сервере

29
задан jackysee
25.04.2023 2:35 Количество просмотров материала 2887
Распечатать страницу

5 ответов

ssh -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB

или с помощью plink (Putty link) из командного окна:

plink -ssh -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB
6
отвечен Cristian Ciupitu 2023-04-26 10:23

что касается запуска этой команды как одной, предыдущий ответ правильный, но если второй ssh требует пароля, он, вероятно, не будет работать (в зависимости от конфигурации ssh по умолчанию). Вам придется принудительно выделить псевдо-tty с помощью опции-t, как в:

ssh -t -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB

(это работает с помощью команды ssh cygwin)

3
отвечен Nicolas Bonnefon 2023-04-26 12:40

вы можете использовать опцию ProxyCommand для этого. Поместите следующее в файл конфигурации ssh (обычно это ~/.ssh/config):

Host direct-serverB
ProxyCommand ssh admin@serverA ssh admin@serverB sshd -i

затем вы можете подключиться к serverB, как если бы он был доступен напрямую:

% ssh -L 1521:localhost:1521 admin@direct-serverB

эта команда не открывается все порты на промежуточном сервере. Однако у этого есть недостаток, который необходимо аутентифицировать к serverB и от serverA и от вашей локальной машины.

если сервер имеет netcat установлено, то вы могли бы написать это в вашей конфигурации ssh:

Host direct-serverB
ProxyCommand ssh admin@serverA nc -q0 serverB 22

и отпустите serverA→serverB шаг аутентификации.

2
отвечен liori 2023-04-26 14:57

Я бы попробовал работает:

ssh admin@serverA -L 10022:databaseB:22
ssh admin@localhost -p 10022 -L 1521:database2:1521

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

1
отвечен sarnold 2023-04-26 17:14

следующее что работало для меня.

-- Моя цель состояла в том, чтобы указать клиентскому приложению localhost:1115 и заставить его подключаться к target_db_server:1433.

-- target_db_server доступен только из jumpserver2.

-- jumpserver2 доступен только с jumpserver1.

-- Поэтому команда подключается к jumpserver1, запрашивает токен (в моем случае), затем подключается к jumpserver2 и запрашивает пароль для этого сервер, то локальный клиент может сделать соединение.

ssh -L 1115:127.0.0.1:1115 username@jumpserver1 -tt ssh -L 1115:target_db_server:1433  username@jumpserver2

я обнаружил, что соединение будет тайм-аут, который не был идеальным. Исправлено следующее:

echo "Host *" >> ~/.ssh/config
echo "ServerAliveInterval 60" >> ~/.ssh/config
0
отвечен Dan 2023-04-26 19:31

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх