SSH-туннелирование
Через SSH можно не только подключаться к серверам, но и создавать через них туннели. Это полезно для получения доступа к тем или иным сервисам, которые доступны лишь в пределах локальной сети из соображений безопасности (локальное/удалённое туннелирование) и для обхода блокировок/прочих целей, где нужна передача IP вашего сервера на устройство (динамическое туннелирование).
Локальное туннелирование (параметр -L
)
Представим, что на сервере работает потенциально уязвимое ПО, которое должно работать только в пределах локальной сети, однако к нему необходимо получать доступ с тех устройств, которым вы доверяете. При этом файервол не решает проблему из-за того, что у клиентов имеются динамические IP-адреса, которые необходимо постоянно обновлять в настройках файервола.
В этом случае при подключении используйте параметр -L
вот таким образом: ssh -L ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера
.
После авторизации вы сможете зайти на тот или иной сервис, используя тот самый локальный порт, который вы указали (если указали 9999, то в клиент нужно писать 127.0.0.1:9999
).
Удалённое туннелирование (параметр -R
)
Представим совершенно другую ситуацию: на другом компьютере работает то или иное ПО, однако получить к нему доступ через обычное туннелирование невозможно по различным причинам (например, тот компьютер находится за NAT и вы не можете открыть порты).
В таком случае необходимо на том компьютере инициировать подключение к вашему серверу следующей командой: ssh -R ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера
.
После чего вы можете работать с тем ПО либо находясь в SSH вашего сервера, либо аналогично "пробросив" его на ваш компьютер параметром -L
.
Динамическое туннелирование (параметр -D
)
Данный тип туннелирования особенно полезен, когда вам необходим IP адрес вашего сервера (для обхода блокировок/прочих целей).
Для его использования вам нужен не параметр -L
, а параметр -D
, и используется он вот таким образом: ssh -D ПОРТ пользователь@адрес сервера
. После авторизации укажите тот самый порт как SOCKS прокси в том клиенте, который вы используете (браузер/прочее ПО).
💡 Подсказка
Если вам не нужна терминальная сессия, добавьте параметр -N
:
ssh -N -L ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера
ssh -N -R ЛОКАЛЬНЫЙ_ПОРТ:127.0.0.1:ПОРТ_ВАШЕГО_ПО пользователь@адрес сервера
ssh -N -D ПОРТ пользователь@адрес сервера
PuTTY
В PuTTY туннелирование настраивается в Connections -> SSH -> Tunnels
:
Если вам также не нужна терминальная сессия, то в Connections -> SSH
поставьте галочку у "Don't start shell or command at all":
После выполнения настройки подключайтесь как обычно нажатием кнопки "Open".