
Как настроить Putty для 3-х хопового SSH-туннельного соединения? Я знаю, как настроить Putty для 2-х хопового SSH-туннельного соединения, но теперь я ищу способ настроить его с 3 хопами. Может кто-нибудь объяснить мне процедуру, как мы можем этого добиться?
Для двух прыжков я следую следующему методу.
Windows 10 (Putty) -> Linux Machine1 (192.168.1.100) -> Linux Machine2 (192.168.1.150)
- В окне сеанса указан адрес назначения (192.168.1.150) и порт 22.
- В опции «Прокси» я указал IP-адрес промежуточного сервера (192.168.1.100) и порт 22.
- Также для команды telnet я привел следующее.
plink -agent -l %пользователь %proxyhost -nc %хост:%порт
Вышеуказанная настройка отлично работает для 2 переходов. Но теперь мне нужен SSH-туннель с 3 переходами. Как мне изменить текущий и добавить еще 1 переход?
решение1
Неясно, хотите ли вы просто подключиться к дополнительной машине в той же сети, что и Linux Machines 1/2, или вам нужно перейти в другую сеть за их пределами (например, Machine 4 в 172.22.1.x).
Если вы просто пытаетесь подключиться к другой машине в той же сети 192.168.1.x, что и Linux Machine 1/2, используйте настоящийSSH-туннель(находится в меню Putty Connection -> SSH -> Tunnels
). Вы можете настроить несколько туннелей для любого количества машин.
Если вы действительно пытаетесь подключиться к третьей сети, вы можете открыть другой экземпляр Putty, который подключается через туннель, определенный в вашем исходном экземпляре Putty.
- Определите туннель в Putty, который перенаправляет порт на вашей локальной машине (например, 2222) на порт 22 на Linux Machine2
- Затем откройте еще один экземпляр Putty на вашем компьютере с Windows, который использует туннель (т. е. подключается к Localhost:2222) и определяет новый туннель для переадресации дополнительного порта (например, 2223) на порт 22 на компьютере Machine4 (ваш третий переход).
- Откройте еще один экземпляр Putty и подключитесь к Localhost:2223 для доступа к Machine4.
Я делал это только с 2 прыжками, поэтому не знаю, как это будет работать. Это не идеальное решение, но оно может сработать, если это ваш единственный вариант.
Редактировать: Если вы не ограничены Windows/Putty,это (Прозрачный многоадресный SSH)можете делать то, что хотите. Если вы ограничены Windows,Cygwinмогут иметь более гибкие инструменты SSH.
решение2
Многоадресный туннель с PuTTY
PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> Место назначения (dIP)
Быстрый ответ:
Ваш подход правильный, просто используйте plink на jHost1 как локальный прокси для plink на jHost2:
plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"
Дополнительные пояснения и предостережения:
Используйте
-t
(в обоих вариантах) так, чтобы ваштерминальные сигналыработать (поскольку вы не вызываете удаленную оболочку на хостах перехода)Естьпароли в открытом виде(в командной строке / конфигурации PuTTY) когда
-l user -pw password
используется (не имеет значения, используете ли вы заполнитель PuTTY %proxypass).- используйте
-i
для указания закрытого ключа без парольной фразы (поскольку PuTTY использует стандартный ввод-вывод, и вы не сможете войти в него) - или используйте
-agent
для использования ключей из Pageant - Переадресация агента (
-a
) не требуется, поскольку plinks работают локально.
- используйте
Запустите plinks из командной строки в первый раз, чтобы убедиться, что нет дополнительных вопросов. Обычно вы получаете "Входящий пакет был искажен при расшифровке" ошибка, если plink просит вас импортировать SSH-ключ jHost.
Обратите внимание на использование
jHost
andjIP
. ПодjHost
этим я подразумеваюлогическое имя хостадля поиска ключа "known_hosts" plink (хранилище PuTTY в реестре Windows).jIP
— это имя/IP-адрес следующего перехода, доступный из текущего перехода. (Обычно вы подключаетесь из другой сети, неспособной повторно подключитьсяjHost
.)- Внешний plink может просто использоваться,
jHost2
поскольку соединение проксируется и поиск DNS вообще не выполняется. - Внутренний plink должен использовать
jIP1
для подключения,-loghost jHost1
локального поиска ключа и-nc jIP2:jPort2
NetCat для следующего перехода.
- Внешний plink может просто использоваться,
Если вам нужно использоватьTCP-пересылкана Destination (который должен быть разрешен), единственное, что вам нужно сделать, это настроить его в PuTTY так, как будто бы хостов перехода вообще нет. Это потому, что SSH-соединение с Destination туннелируется через jHost2, а это соединение в свою очередь через jHost1, и хосты перехода не имеют представления о туннеле.
- В отличие от простого подключения по ssh к хосту перехода и повторного запуска ssh для достижения пункта назначения, вам нужно использовать
<enter>~C<enter>
последовательность для перехода к ssh-клиенту хоста перехода и использовать команды-L
/-R
для динамического добавления туннелей.
- В отличие от простого подключения по ssh к хосту перехода и повторного запуска ssh для достижения пункта назначения, вам нужно использовать
Нет пересылки TCP
plink -nc
( ssh -W
эквивалент) — это локальный прокси, который перенаправляет свой стандартный ввод-вывод по протоколу TCP через хост перехода. Если вы не можете разрешить пересылку TCP на хостах перехода, в качестве ограниченного обходного пути вы можете подключиться по ssh jHost1
и использовать ssh user2@jHost2 -t ssh user@Destination
в "Подключение -> SSH -> Удаленная команда" без настроек прокси.
Таким образом, вы запускаете новый SSH-клиент на хосте перехода (и ключи должны быть в наличии / пароли должны быть введены повторно / агент должен быть перенаправлен, конфигурация / известные_хосты должны быть продублированы...).