У меня есть две машины. оба за NAT. Также у меня есть доступ к SERVER с каждой машины. Есть ли способ сделать SSH туннель от машины 1 до машины 2 через сервер?

Клиентские машины Linux Mint. СЕРВЕР - это Debian. У меня есть только права доступа пользователя на всех машинах

2 ответа2

0

Я вижу, как это можно сделать ..

Итак, у вас есть 3 компьютера. А, В, С

А, Б позади НАТ. Допустим, B является посредником

Способ 1

2 туннеля

Таким образом, вы можете установить SSH соединение от A до B (Туннель 1). И от C до B (Туннель 2). И вперед туннель 1, туннель 2.

Компьютер A соединяется с SSH -L

Компьютер C соединяется с SSH -R

Параметр -L или -R определяет, какая сторона туннеля слушает, а какая сторона туннеля пересылает.

Так что, если я не ошибся, вы могли бы сделать что-то вроде

A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB

Но я не уверен, что вы можете сделать два подключения к одному SSH-серверу, так что попробуйте это .. Создание двух разных sshd-серверов.

Отредактируйте sshd_config в CompB, и вы увидите, что в поле «Порт 22» добавлена строка под ним «Порт 222». Затем CompB запустит сервер ssh на двух портах.

Затем вы можете подключиться к ssh-серверам через два разных порта 22 и 222.

A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222

Порт 1234 - это порт компьютера А, к которому вы подключаете свою клиентскую программу. Это вход в туннель 1

Порт 2345 является портом на компьютере B и входом в туннель 2

Порт 3456 - это порт, на котором вы запускаете серверную программу на CompC

Таким образом, CompA может подключиться к серверу на CompC через CompB

Способ 2

один туннель

Один из вариантов - использовать только один туннель, но тогда вы получаете шифрование только на половине маршрута. 5.6.7.8 является IP-адресом CompC, а порт 3456 является сервером CompC, а порт 1234 является портом прослушивания для туннеля.

A$ ssh -L 1234:5.6.7.8:3456 user@compB

Затем на CompA подключите клиентскую программу к порту 1234 на CompA, и все это перейдет на CompC.

0

на основании ответа барлопа

У меня есть A и B за NAT. А С, к которому обращаются из А и Б

На CI должен быть только ssh доступ. Больше ничего не требуется.

на машине A добавить задачу в crontab

$crontab -e

TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

на машине B добавить задачу в crontab

$crontab -e

TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

ВНИМАНИЕ: порты 1143 и 1144 изменены на хосте B по сравнению с хостом A

на хосте A для подключения к B вы запускаете ssh -p 1234 Buser@localhost
на хосте B для подключения к A вы запускаете ssh -p 1234 Auser@localhost
на хосте C для подключения к A вы запускаете ssh -p 1144 Auser@localhost
на хосте C для подключения к B вы запускаете ssh -p 1143 Buser@localhost

Вы можете увидеть информацию о переподключении под управлением cat ~/ssh-world.log

UPD

Остановите сеанс отключается / зависает, добавив в ~ / .ssh / config

Host *
    ServerAliveInterval 15

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