Наличие ssh-туннелирования для удаленного доступа с третьей машины

Наличие ssh-туннелирования для удаленного доступа с третьей машины

Я с трудом понимаю, возможно ли следующее и как это сделать.

Допустим, у меня есть машина T(цель), к которой я хочу получить удаленный доступ (в идеале через ssh).

Tнаходится за маршрутизатором/брандмауэром Rи я не могу перенаправить порт (например) 22на Rпорт 22 . TОдним словом, прямой sshдоступ к Tневозможен.

Теперь скажи, что

  • У меня есть машина, Aнад которой я имею полный контроль.

  • Я могу подключиться по ssh из T, Aт.е.

      T:  ssh user@A
    

    преуспевает.

В1:могу ли я использовать это для доступа к оболочке из T? AТ.е. могу ли я использовать соединение, созданное из Tдля A, чтобы использовать Tиз A?

   T ---> ssh ----> A          # this is possible               

   T <--- ? shell ? <---- A    # is this possible?

В2:ЕслиQ1возможно:

Допустим, у меня есть третья машина L(например, мой ноутбук), и я хочу получить доступ к оболочке из T. Могу ли я получить доступ к Lssh-туннелю ?AL

   T ----> ssh ----> A <---- ssh < ---- L

   T <-------  ?? %&£€ ?? <------- L       # is this possible?

любая помощь приветствуется.

решение1

Конечно, это возможно.

Q1: возможно ли обратное туннелирование через ssh?

Да. Вот несколько ответов о резервном туннелировании:

Q2: возможно ли туннелирование зарезервированного туннеля?

Да, это по сути ssh туннель через туннель. Вот несколько ответов относительно туннеля в туннель:

решение2

Я делаю это все время, в другую сторону. Сначала установите обратный туннель SSH от T до localhost на A, затем туннель от L до стороны A туннеля AT, затем используйте ssh для подключения к локальной части туннеля LA, и вы подключитесь удаленно через LAT.

В моем примере A прослушивает ssh-соединения на порту 22123.
Локально я использую имя пользователя user, удаленно — user.name.
У меня есть ключи локально с именами ~/.ssh/A_id_rsa и ~/.ssh/T_id_rsa для подключения к 2 машинам A и T соответственно как user.name.

Вот скрипт для подключения туннеля TA, который следует запустить на T.

#!/bin/баш

SSH_KEY="-i /home/имя.пользователя/.ssh/A_id_rsa"
REMOTE_USER="имя.пользователя"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

Вот скрипт для подключения туннеля LA, который следует запустить на L.

#!/bin/баш

SSH_KEY="-i /home/user/.ssh/A_id_rsa"
REMOTE_USER="имя.пользователя"
GATEWAY_MACHINE="A.domain.com"
GATEWAY_SSH_PORT="22123"

ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}

Затем я добавляю следующее в файл /etc/hosts моего локального хоста, чтобы я мог ссылаться на локальную сторону туннеля как на T:-

127.0.0.1 Т

Затем у меня есть этот скрипт, в нашем примере называемый /usr/local/bin/T, для подключения к нему

#!/bin/баш

SSH_KEY="-i /home/user/.ssh/T_id_rsa"
REMOTE_USER="имя.пользователя"

ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T

Туннель TA является обратным, поэтому -R, туннелер LA является локальным, поэтому -L. -N в скриптах не позволяет им запускать оболочку для A, поэтому я обычно запускаю его либо с помощью &, чтобы запустить его в фоновом режиме, либо нажимаю ctrl+Z и запускаю bg, чтобы сделать это, после ввода пароля для разблокировки A_id_rsa, если он еще не загружен в мою связку ключей.

Связанный контент