OpenSSH - перенаправление портов через туннель Печать
Добавил(а) microsin   

Кроме защиты протоколов ftp, telnet и защищенного копирования файлов, сервер SSH предоставляет удобную возможность - перенаправление портов через защищенный туннель.

Рассмотрим эту возможность на примере удаленного подключения к RDP-порту через защищенный туннель. В этом примере предполагается, что сервер OpenSSH и сервер RDP работают на одном и том же компьютере (хотя в общем случае это и не обязательно), а туннель инициируем SSH-клиентом putty. Процесс по шагам:

1. Как устанавливается сервер SSH, описано в примерах [1, 2, 3]. Далее удостоверяемся, что на сервере SSH включена возможность перенаправления портов. Для этого открываем конфиг сервера %ProgramFiles%\OpenSSH\etc\sshd_config, и ищем строку AllowTcpForwarding yes - она должна быть раскомментирована (комментарий начинается с символа #). Если раскомментировали (или поменяли с no на yes), то перезапускаем службу сервера OpenSSH. На сервере на этом работы завершены, все остальное делается на клиенте (putty).

2. Запускаем putty, настраиваем сессию. Все как обычно - жмем правой кнопкой на верхней плашке окна putty, выбираем "New session...", с категории Session указываем IP или имя сервера FreeBSD, протокол SSH, в окне ввода "Saved Sessions" указываем произвольное имя сессии. Переходим в категорию Connection\Data, указываем в окне ввода "Auto-login username" имя пользователя, под которым будем логиниться. Если для аутентификации используем ключи, то переходим в категорию Connection\SSH\Auth, указываем секретный ключ для аутентификации - рядом с окном "Private key file for authentication:" жмем кнопу "Browse..." и выбираем файл секретного ключа, который был сгенерирован программой puttygen.exe (как это делается, описано в [3]). Переходим в раздел Connection\SSH\Tunnels, в Source port вводим 3390, в Destination вводим localhost:3389, жмем кнопку Add. Если поставить галочку "Local ports accept connections from other hosts", то туннелируемый порт (то, что ввели в Source port) будет доступен для коннекта не только на машине с putty, но и с другой машины. В итоге должно получиться нечто, показанное на картинке (в этом примере сделаны туннели для RDP 3389 -> 3390 и для radmin 4899 -> 4890):

putty tunnel

Снова переходим в категорию Session, жмем кнопку Save.

3. Запускаем сессию, нажав на кнопку Open. После прохождения аутентификации (либо по паролю, либо автоматически) запустится обычная консоль telnet - можно вводить команды интерпретатора cmd, и они будут выполняться. Но нас интересует не это - на локальной машине, где запущена сессия, должен открыться локальный порт 3390 (это мы ввели в Source port, можно использовать любой свободный на локальной машине клиента порт), который "проброшен" на сервер SSH по адресу localhost, порт 3389 (это мы задали в Destination). Теперь можно на локальной машине запустить клиента RDP mstsc.exe, указать в строке адреса localhost:3390, и подключиться к протоколу RDP на сервере SSH.

Немного пояснений. В поле Destination мы ввели localhost:3389 что означает локальный адрес по отношению к серверу SSH (то есть сам сервер), порт 3389. Туда с равным успехом можно ввести другое имя и порт, доступные для сервера SSH, и это соединение будет проброшено через SSH-туннель на машину клиента, на порт, который мы ввели в поле Source port. Подключаться можно на клиентской машине на адрес localhost, порт Source port (в этом примере localhost:3390). Можно также коннектиться с другой машины на клиентскую машину (клиентская - это где запущена ssh-сессия putty с туннелем) к порту 3390, если была поставлена галочка "Local ports accept connections from other hosts" на шаге 2.

С туннелями у putty есть глюк - если сессия с туннелями обрывается, то перезапуск сессии почему-то не восстанавливает работу туннелей. Чтобы туннели заработали снова, нужно переоткрыть putty и снова загрузить сессию с настроенными туннелями.

[Ссылки]

1. putty сервер SSH аппаратный домашний роутер WL500g ASUS site:wl500g.info.
2FreeBSD: настройка sshd - как поднять сервер SSH на FreeBSD.
3OpenSSH для Windows - как поднять сервер SSH на Windows.
4Pscp: как передавать файлы по протоколу ssh.