Многоадресный туннель с PuTTY

Многоадресный туннель с PuTTY

Как настроить 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"

Дополнительные пояснения и предостережения:

  1. Используйте -t(в обоих вариантах) так, чтобы ваштерминальные сигналыработать (поскольку вы не вызываете удаленную оболочку на хостах перехода)

  2. Естьпароли в открытом виде(в командной строке / конфигурации PuTTY) когда -l user -pw passwordиспользуется (не имеет значения, используете ли вы заполнитель PuTTY %proxypass).

    • используйте -iдля указания закрытого ключа без парольной фразы (поскольку PuTTY использует стандартный ввод-вывод, и вы не сможете войти в него)
    • или используйте -agentдля использования ключей из Pageant
    • Переадресация агента ( -a) не требуется, поскольку plinks работают локально.
  3. Запустите plinks из командной строки в первый раз, чтобы убедиться, что нет дополнительных вопросов. Обычно вы получаете "Входящий пакет был искажен при расшифровке" ошибка, если plink просит вас импортировать SSH-ключ jHost.

  4. Обратите внимание на использование jHostand jIP. Под jHostэтим я подразумеваюлогическое имя хостадля поиска ключа "known_hosts" plink (хранилище PuTTY в реестре Windows). jIP— это имя/IP-адрес следующего перехода, доступный из текущего перехода. (Обычно вы подключаетесь из другой сети, неспособной повторно подключиться jHost.)

    • Внешний plink может просто использоваться, jHost2поскольку соединение проксируется и поиск DNS вообще не выполняется.
    • Внутренний plink должен использовать jIP1для подключения, -loghost jHost1локального поиска ключа и -nc jIP2:jPort2NetCat для следующего перехода.
  5. Если вам нужно использоватьTCP-пересылкана Destination (который должен быть разрешен), единственное, что вам нужно сделать, это настроить его в PuTTY так, как будто бы хостов перехода вообще нет. Это потому, что SSH-соединение с Destination туннелируется через jHost2, а это соединение в свою очередь через jHost1, и хосты перехода не имеют представления о туннеле.

    • В отличие от простого подключения по ssh к хосту перехода и повторного запуска ssh для достижения пункта назначения, вам нужно использовать <enter>~C<enter>последовательность для перехода к ssh-клиенту хоста перехода и использовать команды -L/ -Rдля динамического добавления туннелей.

Нет пересылки TCP

plink -nc( ssh -Wэквивалент) — это локальный прокси, который перенаправляет свой стандартный ввод-вывод по протоколу TCP через хост перехода. Если вы не можете разрешить пересылку TCP на хостах перехода, в качестве ограниченного обходного пути вы можете подключиться по ssh jHost1и использовать ssh user2@jHost2 -t ssh user@Destinationв "Подключение -> SSH -> Удаленная команда" без настроек прокси.

Таким образом, вы запускаете новый SSH-клиент на хосте перехода (и ключи должны быть в наличии / пароли должны быть введены повторно / агент должен быть перенаправлен, конфигурация / известные_хосты должны быть продублированы...).

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