Туннельная цепь ssh

Вот сценарий

Я пытаюсь получить доступ к scp на server3, но есть только открытый доступ ssh к серверу 1. Для ssh на server3, я должен ssh на server1, ssh на server2, затем ssh на server3.

Мой надежный конечный результат состоял бы в том, что я мог бы WinSCP на localhost: 8022, и он предоставит мне доступ к файлам на сервере3.

Я пытаюсь использовать туннели ssh, но через все обучающие программы и вопросы, которые я прочитал, ни один из них не работает для этого сценария.

Я использую putty для Windows.

Любые предложения будут действительно полезными. Спасибо.

Ответы

Ответ 1

В OpenSSH я использую эту настройку, когда мне нужны туннели. Это позволяет мне напрямую набирать sftp server3, не беспокоясь о том, чтобы вручную запустить туннели server2 и server1.

# ~/.ssh/config

# to connect to server2, tunnel through server1
Host server2
ProxyCommand ssh server1 nc %h %p

# to connect to server3, tunnel through server2
Host server3
ProxyCommand ssh server2 nc %h %p

Чтобы быть более полным, я обычно использую ssh -oCiphers=arcfour128,arcfour256,arcfour,blowfish-cbc -oControlMaster=no -oForwardX11=no -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes server1 nc %h %p как ProxyCommand.

  • туннелирование ssh уже зашифровано, поэтому нет смысла использовать более тяжелый aes/3des для внешнего слоя; arcfour и blowfish быстрее.
  • Остальные настройки -o**** выходят из паранойи, так что ничего не сломается, даже если в ssh_config добавлена ​​строфа Host server1 с действительно странными настройками.

Аналогично, вы можете настроить PuTTY на использование прокси-команды plink -P %proxyport -pw %pass %[email protected]%proxyhost nc %host %port и установить имя хоста/порт/пользователя/пароль прокси-сервера в панели конфигурации Connection/Proxy соответственно. plink, а остальная часть пакета PuTTY (pscp, psftp и т.д.) загружает все, что сохраняется в графической конфигурации PuTTY; надеюсь, WinSCP тоже. (Я не использую его, поэтому я не слишком хорошо знаком с его функциями.)

Ответ 2

Первое решение, которое бросается в голову, - это туннель одного локального порта для каждого из ваших серверов. Поскольку SSH использует порт 22, мы будем использовать каждое SSH-соединение для туннелирования локального порта на следующий серверный порт 22.

Когда вы открываете PuTTY, вы получаете диалог PuTTY Configuration. Две категории, которые вам нужно изменить: "Session" и "Connection → SSH → Tunnels".

  • Откройте копию PuTTY. Используйте следующие настройки:

    • Подключение к хосту

      • Имя хоста: server1
      • Порт: 22
    • Туннельный порт

      • Локальный режим
      • Исходный порт: 15500
      • Назначение: server2:22 (безопасный порт оболочки)

        PuTTY Configuration window before pressing AddPuTTY Configuration window after pressing Add

    Теперь, каждый раз, когда вы подключаетесь к порту 15500 на вашем локальном компьютере, ваше соединение туннелируется на порт 22 на сервере2.

  • Откройте копию PuTTY. Используйте следующие настройки:

    • Подключение к хосту
      • Имя хоста: localhost
      • Порт: 15500
    • Туннельный порт
      • Локальный режим
      • Исходный порт: 15501
      • Назначение: server3:22 (безопасный порт оболочки)
  • Откройте копию PuTTY. Используйте следующие настройки:

    • Подключение к хосту
      • Имя хоста: localhost
      • Порт: 15501
    • Туннельный порт
      • Локальный режим
      • Исходный порт: 15502
      • Назначение: server3:22 (безопасный порт оболочки)
  • Используйте WinSCP для подключения к localhost на порту 15502. Ваше соединение будет туннелироваться, как будто вы напрямую подключаетесь к server3.

Сообщите мне в комментариях, работает ли это для вас. Удачи!

Ответ 3

Этот метод аналогичен тому, как вы можете использовать proxycommand в открытом файле конфигурации ssh.

Необходимыми предпосылками для этого метода является то, что Pageant должен использоваться с аутентификацией с открытым ключом всеми промежуточными (прокси) хостами, иначе вы получите мигающий курсор и ничего больше. Чтобы узнать больше о Pageant, PuTTYgen и открытых ключах, см.:
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter8.html#pubkey
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter9.html#pageant

У нас есть четыре машины, доступные в этом порядке
PuttyPC → server01 → server02 → server03

Для сервера01 у нас есть спасительная сессия Putty как:
Главное окно: [email protected]//порт 22//SSH
Сохраните этот сеанс как server01

Для server02 у нас есть спайт-сессия Putty как:
Главное окно: [email protected]//порт 22//SSH
Окно конфигурации прокси: введите local//прокси-команда plink -load server01 -nc %host:%port
Сохраните этот сеанс как server02

Для сервера03 мы сохранили сеанс Putty как:
Главное окно: [email protected]//порт 22//SSH
Панель конфигурации прокси: введите local//прокси-команда plink -load server02 -nc %host:%port
Сохраните этот сеанс как server03

Это означает, что сохраненный сеанс для сервера03 вызовет сохраненный сеанс для сервера02, а сохраненный сеанс server02 вызовет сеанс server01.

Ответ 4

Здесь хорошо описано решение perl script здесь. Также читайте комментарии к публикации.

Подробнее читайте Пересылка агента SSH (см. комментарий к сообщению perl script).

Ответ 5

Ответ заключался в обратном туннеле от server3

Ответ 6

Если вам нужно только переступить один сервер, мне было проще выполнить эту настройку я WinSCP напрямую.

сценарий: computer- > server1- > server2

1: установите соединение с сервером2

2: Нажмите Advanced- > Connection- > Tunnel

3: включить туннель SSH и установить хост на сервер1