туннельная цепь ssh - PullRequest
17 голосов
/ 18 июня 2009

Вот сценарий

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

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

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

Я использую замазку в Windows.

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

Ответы [ 6 ]

20 голосов
/ 14 июля 2009

В 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.

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

10 голосов
/ 18 июня 2009

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

Когда вы открываете PuTTY, вы встречаетесь с диалогом настройки PuTTY. Вам нужно отредактировать две категории: «Сеанс» и «Соединение → SSH → Туннели».

  1. Открыть копию PuTTY. Используйте эти настройки:

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

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

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

        PuTTY Configuration window before pressing Add PuTTY Configuration window after pressing Add

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

  2. Открыть копию PuTTY. Используйте эти настройки:

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

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

Дайте мне знать в комментариях, работает ли это для вас. Удачи!

4 голосов
/ 10 февраля 2012

Этот метод аналогичен тому, как вы можете использовать прокси-команду в открытом конфигурационном файле 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

Для server01 у нас есть сохраненный сеанс Putty как:
Главное окно: user1@server01 // порт 22 // SSH
Сохранить эту сессию как server01

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

Для server03 у нас есть сохраненный сеанс Putty как:
Главное окно: user3@pc3 // порт 22 // SSH
Панель настройки прокси: введите local // команда прокси plink -load server02 -nc %host:%port
Сохранить эту сессию как server03

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

0 голосов
/ 19 января 2017

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

сценарий: компьютер-> сервер1-> сервер2

1: настройка соединения с сервером2

2: нажмите Дополнительно-> Соединение-> Туннель

3: включить туннель SSH и установить для хоста server1

0 голосов
/ 18 июня 2009

Ответ был обратный туннель с сервера3

0 голосов
/ 18 июня 2009

Здесь хорошо описано решение сценария Perl здесь . Прочтите также комментарии к публикации.

Подробнее о Переадресация агента SSH (см. Комментарии в комментариях к скрипту perl).

...