В этой статье хотел бы немного рассказать о такой замечательной возможности SSH как Port Forwarding (или SSH Tunneling). Начну с того, что ssh - это вообще сам по себе отличный инструмент администрирования, который несомненно придет на помощь, когда нужно удаленно зайти на сервер, поуправлять различными сервисами, передать или загрузить файлы и т.д. Собственно, знают это и пользуются этим все, но немногие помнят про то, что ssh еще может "пробрасывать" порты.
Лучше всего сразу продемонстрировать все на примерах. Представим, что у вас дома работает некий сервер homeserver, находящийся в локальной сети и на нем запущен допустим VNC server на порту 5900, принимающий соединения только из этой самой локальной сети. Усложним задачу тем, что на homeserver нету SSH-сервера, но в локалке есть другая машина, принимающая внешние соединения по SSH (назовем ее homegateway).
Итак, вы находитесь на работе и вам нужно получить доступ к рабочему столу homeserver. Здесь и придет на помощь Port Forwarding. Все, что нужно сделать - это открыть ssh-тунель идущий с вашей рабочей станции к homegateway, который затем перебросит все на порт 5900 машине homeserver. Звучит немного сложнее, чем есть на самом деле:
По данной команде на вашей локальной (рабочей) машине откроется порт 5901, все данные которого будут переброшены на порт 5900 машины homeserver, через SSH-туннель с машиной homegateway.
Дальше все, что нужно сделать - это запустить VNC клиент на рабочей машине и присоединиться к localhost:5901.
Еще раз, как это работает, но уже более детально:
- Вы выполняете команду и запускаете SSH клиент
- Клиент, как обычно, подключается к серверу homegateway и производит аутентификацию
- Клиент занимает порт 5901 на loopback-интерфейсе локальной машины, с которой был запущен
- Когда какой-либо процесс на локальной машине пытается подключится к порту 5901, SSH-клиент принимает соединение и информирует homegateway о том, что надо создать подключение к homeserver по порту 5900
- SSH-клиент принимает все данные с порта 5901 и передает их по зашифрованному каналу на homegateway, который в свою очередь их дешифрует и отдает homeserver'у. Ответ от homeserver возвращается по такому же принципу.
Замечу, что внутри открытой ssh-сессии можно делать все, что душе угодно (ну кроме ребутов, шатдаунов и т.д.), или не делать ничего вообще. Иными словами, это обычная ssh-сессия.

Великолепно, то что надо!!!
Есть PC1 (ЗА НАТОМ), PC2 и SERVER с демоном sshd. Подскажите , каким образом с PC2 попасть на PC1(remote desctope) использую SERVER как промежуточный ? ВСЕ PC WINDOWS
К сожалению, не помню точно, как работает виндузовый ремоут десктоп, но если он использует один TCP порт, то можно, узнав этот порт, все сделать, как описано в статье. Конечно, при условии, что SERVER доступен с PC2, а PC1 доступен для SERVER.
Антон, хорошо написал, спасибо.
В VNC я не верю - муная штуковина.
Вот на хабре приличная статья
http://habrahabr.ru/blogs/linux/39116/
и в ней используется Netcat
http://en.wikipedia.org/wiki/Netcat
Отправить комментарий