Знание того, как развернуть ssh-туннель, может помочь вам получить доступ к недоступным иначе сетям и системам.
Туннелирование SSH или переадресация портов SSH — это метод создания зашифрованного соединения SSH между клиентом и сервером, через который можно ретранслировать порты служб.
Локальный SSH-туннель с переадресацией портов
Вы можете использовать локальный ssh-туннель, если хотите получить доступ к ресурсу, к которому вы не можете получить доступ напрямую, но это может сделать только ssh-сервер, к которому у вас есть доступ. Давайте рассмотрим несколько сценариев таких случаев.
Через прокси к удаленному сервера.
На изображении выше первый сервер не может подключиться к http://192.168.0.3, но может подключиться по SSH к 192.168.0.2. Следующая команда ssh, выполненная на первом сервере, позволит ему подключиться к третьему серверу.
$ ssh -L 8080:192.168.0.3:80 UserServer2@192.168.0.2
Теперь на первом сервере можно открыть браузер, перейти по адресу http://localhost:8080 и увидеть веб-страницу, размещенную по адресу 192.168.0.3.
Переадресация локального порта.
На изображении выше первый сервер хочет подключиться ко второму серверу через порт 80, но между ним находится брандмауэр, который запрещает это. Поскольку первый сервер может подключаться ко второму по SSH, мы можем создать ssh-туннель с переадресацией локальных портов для доступа к этому порту.
Для этого на первом сервере надо использовать следующую команду:
ssh -L 8080:192.168.0.2:80 UserServer2@192.168.0.2
Теперь, когда вы на первом сервере откроете браузер и перейдет по адресу http://localhost:8080, то сможете увидеть все, что есть у второго сервера на порту 80.
Переадресация локального порта. Синтаксис.
Синтаксис создания локального туннеля переадресации портов ssh следующий:
ssh -L <LPORT>:<RHOST>:<RPORT> <GATEWAY>
Удаленный SSH-туннель с переадресацией портов.
В этом сценарии мы создаем обратный SSH-туннель. Здесь мы можем инициировать ssh-туннель в одном направлении, а затем использовать этот туннель для создания ssh-туннеля в обратном направлении. Это может быть полезно, когда вы помещаете сервер в сеть и хотите, чтобы он мог соединиться с корневым. Затем, когда он установит соединение, вы сможете подключиться к нему через установленный ssh-туннель.
Допустим мы находимся на втором сервере и хотим подключиться к первому по SSH. Однако брандмауэр блокирует это соединение напрямую. Поскольку первый сервер может подключаться ко второму по ssh, мы можем подключиться с его помощью, и когда захотите со второго вернуться по ssh к первому, он может пройти по этому ранее установленному туннелю.
На первом сервере такой туннель инициируется следующей командой:
ssh -R 2222:localhost:22 UserServer2@192.168.0.2
Так открывается порт 2222 на втором сервере. Затем перенаправляет его на порт 22 на первом сервере. Таким образом, если второй сервер подключится к самому себе через порт 2222, он достигнет первого сервера.
Второй сервер теперь может подключиться к первому по SSH следующим образом:
ssh -p 2222 UserServer1@localhost
Использование опции -N.
При использовании ssh можно указать флаг -N. Он сообщает ssh, что вам не нужно отправлять какие-либо команды через ssh-соединение, когда оно установлено. Эта опция часто используется при создании туннелей, поскольку нам не нужно получать различные подсказки.
AutoSSH
Команда autossh используется для обеспечения устойчивости ваших туннелей. Его задача — убедиться, что ваше ssh-соединение работает, а если нет, создать его.
autossh -N -i /home/UserServer1/.ssh/id_rsa -R 2222:localhost:22 UserServer2@192.168.0.2
Опция -i /home/UserServer1/.ssh/id_rsa указывает на необходимость использования ключа для аутентификации этого ssh-соединения.
Теперь, если ваш туннель выйдет из строя, то он автоматически попытается восстановиться. При этом будет продолжать попытки соединения, пока не добьется успеха. Чтобы сделать его постоянным после перезагрузки, добавьте команду ssh в качестве задания cron.
P.S. Если вам интересен материал не забывайте ставить палец вверх под статьей. А так же, подписывайтесь на анонсы новых статей в телеграмм и на сайте RoadIT