С помощью SSH-туннелей можно легко получить сетевой доступ к внутренним ресурсам, которые доступы за SSH-хостом. В сети есть уже много инструкций с подробным описанием синтаксиса и ключей, которые можно использовать для создания туннеля. В данной инструкции мы сконцентрируемся на простых примерах, которые можно держать под рукой в качестве шпаргалки.
Синтаксис для создания SSH-туннелей
Примеры использования
Бастионы
Дополнительные примеры использования туннелей
Решение возможных проблем
Дополнительные материалы
Кратко опишем синтаксис подключения. Мы можем строить туннель с пробросом порта как на локальном компьютере, так и удаленном. Рассмотрим оба варианта.
Данный туннель создается с помощью опции -L . В результате будет поднят прослушиватель на локальном компьютере с пробросом на удаленный хост:
ssh -L [locat_server_ip:]local_port:destination_server_ip:remote_port ssh_server_hostname
* в данном примере локальный компьютер начнет слушать порт local_port , и если мы к нему подключимся, то нас перекинет на destination_server_ip:remote_port через узел ssh_server_hostname .
Для создания данного типа туннеля используется опция -R. В результате на удаленном узле будет поднять прослушиватель, который будет отправлять запрос на наш локальный компьютер:
ssh -R remote_port:localhost:local_port ssh_server_hostname
* в нашем примере на узле ssh_server_hostname будет создан прослушиватель на порту remote_port . Если к нему подключиться, запрос будет отправлен на наш локальный компьютер порт local_port .
Рассмотрим, как мы можем применить туннели в работе. По мере надобности, данный список будет пополняться.
1. Проброс порта RDP (3389 -> 3389):
ssh -L 3389:192.168.0.15:3389 root@1.2.3.4
* в примере:
2. Проброс http-порта (81 -> 80):
ssh -L 81:192.168.0.15:80 root@1.2.3.4
* в примере:
3. Проброс https-порта (81 -> 443):
ssh -L 81:192.168.0.15:443 root@1.2.3.4
* в примере:
4. Несколько туннелей через одно подключение:
ssh -L 4443:192.168.0.15:443 -L 2222:192.168.0.15:22 root@1.2.3.4
* в примере:
5. Проброс порта без подключения к консоли SSH:
Если добавить опцию -N, то мы создадим туннель, но не провалимся в SSH консоль:
ssh -N -L 3389:192.168.0.15:3389 root@1.2.3.4
6. Туннель для проброса 80 порта с подключением по нестандартному порту SSH:
ssh -L 80:127.0.0.1:80 -p8022 root@1.2.3.4
* в данном примере мы будет подключаться к хосту 1.2.3.4 по SSH-порту 8022 . Порт 80 будет проброшен на машину, к которой мы и подключились.
Дополнительно рассмотрим еще один прием, который можно использовать при подключении по SSH — так называемый, бастион. По сути, это частный случай быстрого создания туннеля для подключения по SSH. Или, если сказать по-другому, мы подключаемся по SSH к хосту через какой-то другой хост (бастион).
Есть два способа для такого подключения: более современный с использованием jumphost или универсальный при помощи опции ProxyCommand . Рассмотрим их оба.
Синтаксис:
ssh -J <через кого подключаемся> <куда подключаемся>
Пример:
ssh -J user1@jump.remontka.localnet user2@server.remontka.localnet
* в данном примере мы подключаемся к хосту server.remontka.localnet через jump.remontka.localnet . То есть, сначала наш компьютер подключится по SSH к jump.remontka.localnet , создаст туннель до server.remontka.localnet , и уже после, будет создано подключение до нужного нам узла.
** обратите внимание, что для подключения к разных хостам мы используем разные учетные записи user1 и user2 .
Если нам нужно подключиться через бастион и создать туннель, то добавим опцию -L с указанием хоста-назначения, например:
ssh -J user1@jump.remontka.localnet -L 80:192.168.1.55:80 user2@server.remontka.localnet
* мы подключимся к server.remontka.localnet через jump.remontka.localnet . А также создадим туннель до 192.168.1.55 по порту 80 .
Синтаксис:
ssh -o ProxyCommand=»ssh -W %h:%p <через кого подключаемся>» <куда подключаемся>
Пример:
ssh -o ProxyCommand=»ssh -W %h:%p user1@jump.remontka.localnet» user2@server.remontka.localnet
* аналогично Jumphost, мы подключаемся к хосту server.remontka.localnet через jump.remontka.localnet . То есть, сначала наш компьютер подключится по SSH к jump.remontka.localnet , создаст туннель до server.remontka.localnet , и уже после, будет создано подключение до нужного нам узла.
** обратите внимание, что для подключения к разных хостам мы используем разные учетные записи user1 и user2 .
Попробуем найти более интересное применение вышерассмотренному материалу.
Команда scp полезна тем, что позволяет выполнять копирование файлов через SSH. Если путь до конечного компьютера идет через другой, то мы можем использовать его в качестве бастиона.
Пример команды:
scp -oProxyCommand=»ssh -W %h:%p remontka@1.2.3.4″ root@192.168.1.5:~/file ./
* в данном примере:
Рассмотрим некоторые проблемы, с которыми можно столкнуться при работе с туннелями SSH.
При создании туннеля мы подключаемся по SSH, но видим ошибку:
bind [127.0.0.1]:80: Permission denied
channel_setup_fwd_listener_tcpip: cannot listen to port: 80
Could not request local forwarding.
Причина: отсутствие прав для настройки сетевых параметров у пользователя, под которым создается туннель.
Решение: либо повышаем привилении одной из команд:
sudo su
su —
Либо выполняем создание туннеля с повышением привилегий, например:
sudo ssh -L 80:127.0.0.1:80 root@1.2.3.4
Это может быть интересно:
1. Как использовать команду SCP в UNIX без пароля .
2. Настройка быстрого подключения по SSH в Linux .
3. Как разрешить пользователю root заходить по SSH в системах Linux .
4. Настройка домашнего каталога SFTP или SSH Chroot .
5. Настройка SSH на CentOS с аутентификацией через Active Directory .
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…