Туннелирование соединения SSH отклонено

У меня есть виртуальная машина, расположенная внутри частной сети. Итак, сначала я должен войти server.com, а затем войти my-machine.

Я хочу сделать ssh-tunnel со своего ноутбука на my-machine.

ssh -v -A -nNT -L 40000:127.0.0.1:40000 [email protected] ssh -v -nNT -L 40000:127.0.0.1:40000 my-machine & 

Теперь я хочу протестировать ssh-tunnel с netcat.

Я бегу в my-machine:

nc -l 40000

На моем ноутбуке:

~ ❯❯❯ nc 127.0.0.1 40000

Но это дает мне:

debug1: Connection to port 40000 forwarding to 127.0.0.1 port 40000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 40000 for 127.0.0.1 port 40000, connect from 127.0.0.1 port 49692 to 127.0.0.1 port 40000, nchannels 3

Почему это происходит и как это исправить? Я ожидал, что все, что я наберу в консоли своего ноутбука, появится в консоли my-machine.

Что означает последняя строка? Особенно 127.0.0.1 port 49692 почему используется этот порт? Я никогда не печатаю это.

debug1: channel 2: free: direct-tcpip: listening port 40000 for 127.0.0.1 port 40000, connect from 127.0.0.1 port 49692 to 127.0.0.1 port 40000, nchannels 3

person Kenenbek Arzymatov    schedule 30.03.2017    source источник


Ответы (1)


Для каждого TCP-соединения точка-точка требуется две пары IP-адресов и портов. Чтение всего сообщения (а не только той части, которую вы показали):

connect from 127.0.0.1 port 49692

Итак, вы действительно подключаетесь к порту 40000, но вы подключаетесь из порта 49692 (случайно назначенного для вашего netcat или некоторых из переадресованных шагов).

Как решить эту проблему?

Эта переадресация с двойным переходом не работает, потому что вам нужно установить вторую перед первой.

Также вы используете переключатель -N для первой команды, что препятствует запуску второй команды ssh.

Но я бы попробовал ProxyCommand, который заставит вас подключиться к месту назначения с помощью одной команды прямо с вашего хоста:

ssh -v -nNT -L 40000:127.0.0.1:40000 \
    -oProxyCommand="ssh -W %h:%p [email protected]" my-machine & 
person Jakuje    schedule 30.03.2017
comment
Как решить эту проблему? - person Kenenbek Arzymatov; 30.03.2017
comment
Добавил больше деталей в ответ. - person Jakuje; 30.03.2017
comment
Зачем мне нужно, чтобы второе соединение было установлено раньше первого? - person Kenenbek Arzymatov; 30.03.2017
comment
Потому что вам нужно перенаправить удаленный протокол на локальный, и после того, как вы установите первое соединение, на jumphost нет порта для переадресации (пока). - person Jakuje; 30.03.2017
comment
О shot with ProxyCommand: это правильно? У меня ошибка, что Connection closed by remote host. Стоит отметить, что my-machine мне напрямую не виден. - person Kenenbek Arzymatov; 30.03.2017
comment
Должно работать, хотя я не проверял. Загляните на страницу руководства. Запустите его с параметрами отладки -vvv (обе ssh команды)`, выложите логи. Протестируйте снова. - person Jakuje; 30.03.2017