Вы здесь

двойной ssh tunnel

Здравствуйте, подскажите как можно устроить двойной ssh tunnel.
Есть компьютер на работе с выделенным ip-адресом (server), т.е. он виден всем.
Есть 2 компьютера (host1, host2), которые находятся внутри разных локальных сетей.
Хочется перенаправить, к примеру, порт 22 с одной машины на другую.
Пробую так:

host1$ ssh -R 5000:server:22 user@server
host2$ ssh -L 4000:server:5000 user@server

Тогда при попытке соединиться получаю:

host2$ ssh -p 4000 localhost
ssh_exchange_identification: Connection closed by remote host

и одновременно на консоли где залогинен host2 на server появляется

channel 3: open failed: connect failed: Connection refused

Спасибо, Семен.

Если я правильно понял, задача: с host2 зайти по ssh на host1, чему мешает отсутствие маршрута между хостами. Тогда надо
host2$ ssh -L 4000:host1:22 user@server

Но host1 не виден для окружающего мира - это компьютер с ip-адресом 192.168.1.2 внутри некой локальной сети, что писать вместо host1?

Чет как то сложно. Во первых внутри локалки нужен хост с поднятым ссх. Путь это будет 10.10.0.1. Соответсвенно на нем открыт порт 22. Во вторых на маршрутизаторе этой сети ( пусть его внешний адрес будет 89.1.3.117) надо написать правило по пробросу какого нибудь свободного порта, к примеру 2222 , приходящих на внешний интерфейс на порт 22 нашего хоста 10.10.0.1. Тогда извне сети можно обратиться на наш хост так:

ssh -p 2222 89.1.3.117 .

Ежели в качестве маршрутизатора никс, то заморачиваться с пробросом порта ссх внутрь смысла нет, можно использовать ссх маршрутизатора, и из него опять же по ссх достучаться внутрь.

Через ссх можно пробрасывать порты На внутреннюю сетку. Для этого надо настроить соответвующим образом демон ссх, по умолчанию проброс портов запрещен (/etc/ssh/sshd_config параметр GatewayPorts man sshd_config). После настройки и перезапуска демона можно привязать любой из портов локального интерфейса на удаленной машине к любому из портов любого хоста внутренней сети.
Ну к примеру мы привязываем 1111 на localhost к 3389 на 10.254.0.12 (Сервер терминалов под вендой)

Для начала с удаленного хоста открываем ссх сессию
ssh -L 1111:10.254.0.12:3389 -p 2222 89.1.3.117

Затем (опять жеж с удаленного хоста) можно получить терминальную сессию через ссх тоннель так
rdesktop localhost:1111

Все это работает до тех пор пока открыта ссх сессия.

А если локальные сети и маршрутизаторы этих сетей не принадлежат мне?
А именно, у меня есть один компьютер host1 подключенный через yota, другой компьютер host2 через corbina в Москве и сервер, который имеет доступный всему миру ip-адрес, который стоит в третьем месте.
И надо соединить host1 и host2 - 22 или 21 или любой порт.

Задача попасть с host1 на host2 через server?

тогда можно так:
host1$ ssh -R 2222:localhost:22 -gNv user@server
попадаес с host2 на host1:
host2$ ssh server -p 2222

Аналогично и на оборот

Двойной туннель не нужен, но если очень хочется:
host1$ ssh -R 2222:localhost:22 user@server -gNv
host2$ ssh -L 3333:localhost:2222 user@server -gNv

потом с host2 на host1 попадаем: ssh localhost -p 3333

PS есть autossh чтоб это все поднималось автоматом (ключи ссш надо настроить)

О, это как раз то что надо. Большое спасибо!