Протокол SSH позволяет прокладывать TCP туннели внутри защищенного соединения. Фактически это означает, что клиент и сервер SSH создают по дополнительному сокету. Один из них принимает входящие соединения, а второй соединяется с кем-то в своей сети или в интернете. Данные из одного сокета пробрасываются в другой. В зависимости от распределения ролей сокетов туннели делятся на локальные (local) и удалённые (remote) . Первые принимают входящие соединения на локальном порту и пробрасывают их на удаленный сервер, вторые принимают соединения на удаленном сервере и пробрасывают их в локальную сеть.
++++++++ ++++++++
|Клиент| SSH |Сервер| Кто то в сети
Я --->|порт |-----| |----> сервера или в интернете
|5678 | | | с портом 80
++++++++ ++++++++
++++++++ ++++++++
Мой комп |Клиент| SSH |Сервер| Кто то из сети
порт <---| |-----|порт |<--- сервера или из интернета
3389 | | |5678 | подключается ко мне
++++++++ ++++++++
В Unix проброс локального порта 5678 на remoteserv.com:80 через ssh_host.com выглядит так:
ssh -L localhost:5678:remoteserv.com:80 ssh_host.com
После создания канала можно подключаться браузером на http://loclahost:5678. localhost: в опции -L можно опустить. Это значение по умолчанию. Если надо подключиться на порт 80 самого ssh_host.com то можно задать опцию так:
ssh -L 5678:localhost:80 ssh_host.com
Проброс удаленного порта сервера для доступа на свой компьютер удаленным рабочим столом:
ssh -R *:5678:localhost:3389 ssh_host.com
* означает, что на сервере будут задействованы все доступные сетевые интерфейсы. Если этот параметр не указать, то порт 5678 откроется на сервере ssh_host.com только по адресу 127.0.0.1
В командах выше кроме проброса портов на удалённой машине запускается shell и устанавливается терминальное соединение. Если терминал не нужен, то можно запустить ssh
с опцией -N. В этом случае никакая команда на удаленном сервере не запустится, и, что интересно, команды w
, last
и т.п. не будут показывать ваш вход на сервер. Впрочем, информация об авторизации в системе останется в логах категории authpriv.
Опция -A находит на локальной машине порт ssh-agent
пробрасывает его на удаленную машину на случайный порт или Unix-сокет и устанавливает в сеансе ssh переменную SSH_AUTH_SOCK для дальнейшей авторизации через агента.
Опция -X находит на локальной машине порт XWindow и пробрасывает его на первый свободный порт начиная от порта 6000 (базовый порт XWindow). Переменная DISPLAY в сеансе ssh устанавливается в :<номер порта - 6000>. Так, если номер порта на сервере 6007 то DISPLAY=":7".
Опция -D addr:port превращает ваш компьютер в SOCKS прокси с выходом в интернет на стороне сервера. Как и раньше, если вы укажете только порт, то вместо адреса подставится 127.0.0.1 и ваш прокси будет доступен только на локальном компьютере. Если вместо адреса подставить *, то вашим SOCKS прокси смогут воспользоваться все компьютеры, имеющие к вам доступ по сети.
Настройка туннелей в putty
находится в настройках соединения в пункте Connection -> SSH -> Tunnels. Локальный/удаленный туннель может выбираться автоматически на основе введённых данных. В нашем примере локальному туннелю соответствуют поля: Source port - 5678; Destination - remoteserv.com:80
Не забудьте после ввода данных нажать кнопку "Add".
Если вам не нужен терминал, зато нужно формировать туннель из .bat файла - воспользуйтесь программой plink
. Её параметры совпадают с параметрами ssh
.