Туннельная цепь 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 на вашем локальном компьютере, ваше соединение туннелируется на порт 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