1

TL; Dr: A -> B и C -> B работает. Как заставить A-> C работать?

У меня 3 хозяина

A. A local machine
B. A middle-man
C. A phone with a webapp running on port 333

И A, и C могут использовать SSH в B. Итак, A-> B и C-> B работают нормально, но A -> C не работает.



На B я могу получить доступ к этому веб-приложению по адресу http://localhost:3344 после создания туннеля из C:

machine-c$ /usr/bin/ssh -f -N -T -R 3344:localhost:333 user@machine-b



Я бы подумал, что при работающем выше туннеле все, что мне нужно, это туннель от A-> B, вот так:

machine-a$ /usr/bin/ssh -f -N -T -L 9999:machine-b:3344 user@machine-b

Я вижу следующее сообщение:

Local connections to LOCALHOST:9999 forwarded to remote address machine-b:3344

Но доступ к localhost:9999 зависает с повторением следующего набора сообщений:

debug2: channel 3: zombie
debug2: channel 3: garbage collecting
debug1: channel 3: free: direct-tcpip: listening port 9999 for machine-b port 3344, connect from ::1 port 24626 to ::1 port 9999, nchannels 4
debug1: Connection to port 9999 forwarding to machine-b port 3344 requested.
debug2: fd 10 setting TCP_NODELAY
debug1: channel 3: new [direct-tcpip]
channel 3: open failed: connect failed: Operation timed out

Я не уверен, что это актуально, но так как A -> B работает, я также настроил обратный туннель, чтобы B -> A тоже работал. То же самое для B-> C. В общем, следующие работы:

A -> B

machine-a$  ssh user@machine-b

B -> A (сначала требуется обратный SSH-туннель от A-> B)

machine-a$  ssh -f -N -T user@machine-b -R1234:localhost:22
machine-b$  ssh -p 1234 user@machine-a 

То же самое было сделано для C-> B


Как я могу настроить SSH туннель от A до C (через B?) чтобы я мог получить доступ к этому веб-приложению напрямую через A с помощью localhost:3344?




Я посмотрел на следующие вопросы, но не могу обернуть голову вокруг того, что нужно:

SSH как socks прокси через несколько хостов

Переадресация SSH-трафика через средний компьютер

Туннель SSH через несколько переходов

1 ответ1

1

У меня есть похожая настройка на месте, и она работает нормально. Разница, которую я заметил, в вашей машине-ssh команда, которую вы используете 9999:machine-b:3344 а я использую 9999:localhost:3344 . Твой путь у меня тоже не работает, но он не выдает таких же ошибок. Для полноты вот что я получаю:

debug1: Connecting to localhost [::1] port 9999.
debug1: Connection established.
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.5p1 Debian-6
channel 2: open failed: connect failed: Connection refused
ssh_exchange_identification: Connection closed by remote host`

Следующие команды помогают мне:

machine-c$  ssh -f -N -T -R 3344:localhost:333 user@machine-b

Сейчас на автомате:

machine-a$  ssh -f -N -T -L 9999:localhost:3344 user@machine-b

Так как у меня нет порта 333 компьютера-с, я заменил его на 22 и проверил, работает ли туннель, просто подключившись через ssh:

machine-a$  ssh -p 9999 user@localhost

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .