Вы здесь

Туннели в SSH

Протокол 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

Настройка туннелей в putty находится в настройках соединения в пункте Connection -> SSH -> Tunnels. Локальный/удаленный туннель может выбираться автоматически на основе введённых данных. В нашем примере локальному туннелю соответствуют поля: Source port - 5678; Destination - remoteserv.com:80

Не забудьте после ввода данных нажать кнопку "Add".

Если вам не нужен терминал, зато нужно формировать туннель из .bat файла - воспользуйтесь программой plink. Её параметры совпадают с параметрами ssh.

Яндекс.Метрика