Проброс портов через SSH-туннель в Windows
В этой статье мы покажем, как использовать встроенный в Windows OpenSSH сервер для проброса портов через SSH туннель (SSH туннелированние). Перенаправление портов в SSH позволяет туннелировать (пробрасывать) порты приложений с локального компьютера на удаленный сервер и наоборот. Ранее проброс портов через SSH туннель использовался только в среде Linux/Unix , но теперь вы можете воспользоваться этим возможностями и в Windows. Рассмотрим на практическом примере, как на Windows Server через SSH сервер с открытым портом TCP 22 пробросить RDP подключение.
Чаще всего проброс портов через SSH применяется в сценариях, когда нужно подключиться к удаленному компьютеру, который защищен межсетевым экраном. Например, у вас имеется сервер c Windows, на котором открыт только SSH порт (TCP 22). Все остальные порты блокируются аппаратным межсетевым экраном или брандмауэром Windows. Ваша задача подключиться к рабочему столу этого Windows сервера с помощью клиента RDP. Казалось бы, невозможная задача, т.к. порт RDP 3389 блокируется брандмауэром. Однако вы можете воспользоваться технологией проброса портов через ssh-тунель.
Чаще всего используются следующие сценарии проброса SSH:
- Local TCP forwarding — проброс локального порта на удаленный сервер;
- Remote TCP forwarding — проброс удаленного порта на локальный компьютер;
- Двойной SSH туннель – позволяет соединить между собой через SSH сервер компьютеры без выделенных белых IP адресов или находящиеся за NAT (если не подходит решение с OpenVPN)
RDP доступ через SSH туннель (local TCP forwarding)
В этом режиме вы создаете на своем компьютере локальный TCP порт, подключения к которому перенаправляются через SSH туннель на указанный порт удаленного сервера. В этом примере мы создадим локальный порт 8888, при подключении к которому выполняется перенаправление с этого порта на RDP порт 3389 удаленного компьютера. Общая схема подключения выглядит так:
Для создания SSH туннеля с помощью встроенного SSH клиента (встроен в Windows 10 1809 и Windows Server 2019), выполните команду:
ssh -L 8888:192.168.1.90:3389 root@192.168.1.90
Теперь, чтобы подключится к удаленному компьютеру через SSH туннель, вам нужно подключится RDP-клиентом mstsc.exe на локальный порт 8888 своего компьютера:
Авторизуйтесь на удаленном компьютере и можете спокойно работать в RDP-сессии, при этом вы помните, что порт 3389 все еще закрыт в файерволе. С помощью TCPView вы можете убедиться, что RDP подключение установлено локально (RDP подключение инициировано запущенным локально SSH сервером).
Обратите внимание, что если вы перенаправляете таким образом незашифрованный трафик приложения, то по сети он передается в зашифрованном виде. Трафик в лбом случае шифруется на одном конце SSH соединения и расшифровывается на другом.
В таком режиме другие компьютеры в вашей локальной сети тоже смогут подключиться к удаленному RDP серверу, даже если у них полностью заблокирован прямой доступ к удаленному серверу (как по SSH, так и по RDP). Для этого, они должны подключиться RDP клиентом к порту 8888 на вашем компьютере, на котором создан SSH туннель:
mstsc.exe /v 10.10.1.220:8888
Переброс удаленного порта на локальную машину (Remote TCP forwarding)
Есть еще один вариант применения SSH туннеля – remote TCP forwarding. Через SSH туннель вы можете открыть доступ удаленному серверу к локальному порту на вашем компьютере или порту на другом компьютере в вашей локальной сети. Например, вы хотите, чтобы внешний сервер (192.168.1.90) получил доступ к вашему Интранет сайту (не опубликованному в Интернете). Для создания обратного туннеля, используйте такую команду:
ssh -R 8080:internalwebsever:80 user@192.168.1.90
Теперь, чтобы на удаленном SSH сервер получить доступ к веб серверу internalwebsever достаточно в браузере набрать адрес http://localhost:8080 .
С помощью SSH туннелей вы можете строить целые цепочки для форвардинга портов. Включить или отключить SSH туннелирование можно в конфигурационном файле sshd_config директивами:
Руководство: SSH в Терминале Windows Tutorial: SSH in Windows Terminal
В Windows 10 встроен клиент SSH, который можно использовать в Терминале Windows. Windows 10 has a built-in SSH client that you can use in Windows Terminal.
В этом руководстве содержатся сведения о настройке профиля в Терминале Windows, использующем SSH. In this tutorial, you’ll learn how to set up a profile in Windows Terminal that uses SSH.
Создание профиля Create a profile
Вы можете запустить сеанс SSH в командной строке, выполнив ssh user@machine . После этого вам будет предложено ввести пароль. You can start an SSH session in your command prompt by executing ssh user@machine and you will be prompted to enter your password. Вы можете создать профиль Терминала Windows, выполняющий этот процесс при запуске, добавив параметр commandline в профиль в файле settings.json file. You can create a Windows Terminal profile that does this on startup by adding the commandline setting to a profile in your settings.json file.
Указание начального каталога Specify starting directory
Чтобы указать начальный каталог для сеанса SSH, вызываемого с помощью Терминала Windows, можно использовать следующую команду: To specify the starting directory for a ssh session invoked by Windows Terminal, you can use this command:
Флаг -t приводит к выделению псевдотерминала. The -t flag forces pseudo-terminal allocation. Эту возможность можно использовать для выполнения произвольных интерактивных программ на удаленном компьютере, например при реализации служб меню. This can be used to execute arbitrary screen-based programs on a remote machine, e.g. when implementing menu services. Вам потребуется использовать экранированные двойные кавычки, так как производные оболочки Bourne shell не выполняют дополнительную обработку строки в одинарных кавычках. You will need to use escaped double quotes as bourne shell derivatives don’t do any additional parsing for a string in single quotes.
Дополнительная информация: For more information, see:
4 простых способа для работы с SSH в Windows
В данной статье рассказывается о 4 простых способах использования SSH в Windows
Andrew E.
Read more posts by this author.
Andrew E.
SSH является основным решением для безопасного доступа к удаленным терминалам в Linux и других UNIX-подобных системах. Если у вас есть удаленный SSH сервер, к которому вы хотите получить доступ, вам придется загрузить SSH клиент. В Windows его нет, хотя Mac OS X, Linux и даже Google Chrome OS имеют встроенные SSH-клиенты.
Конечно, в Windows есть клиент Telnet, однако он ужасно небезопасен и не рекомендуется к использованию, если только вы не подключены напрямую к удаленной системе и не подключены к Интернету.
FireSSH для Firefox
Firefox известен своими мощными расширениями для браузера, FireSSH является одним из них. Это SSH-клиент, реализованный в виде расширения Firefox, которое работает в вашем браузере, точно так же как FireFTP добавляет мощные возможности FTP в Firefox.
После установки FireSSH нажмите кнопку меню Firefox, выберите Веб-разработчику и нажмите FireSSH, чтобы запустить его. Главная вкладка позволяет вам ввести имя учетной записи, имя хоста и логин, необходимые для вашего SSH-сервера. Вкладка Дополнительно позволяет вам настроить SSH туннелирование, чтобы вы могли туннелировать свой трафик через удаленный SSH сервер. SSH туннелирование имеет множество применений, включая защиту от подслушивания в общедоступных Wi-Fi сетях, удаленный доступ к ресурсам в локальной сети, обход веб-фильтрации и просмотр Интернета, как если бы вы находились в другой стране.
Расширение FireSSH также работает на Mac OS X и Linux.
Secure Shell для Google Chrome
FireSSH также доступен и для Google Chrome, но Google предоставляет собственное официальное клиентское веб-приложение SSH. Просто установите приложение Secure Shell из интернет-магазина Chrome. Хоть оно и написано с использованием веб-технологий и работает в браузере Chrome, оно работает полностью автономно, поэтому вам не нужен доступ в Интернет, если вы хотите подключиться к SSH-серверу, работающему в локальной сети.
Secure Shell открывается в виде вкладки браузера и позволяет подключаться к серверу путем ввода имени пользователя и хоста (IP-адреса) удаленного SSH-сервера. При необходимости вы также можете добавить дополнительные аргументы командной строки SSH. Как и в других веб-приложениях Chrome, вы можете открыть Secure Shell в собственном специальном окне, чтобы отделить его от основного окна браузера. Secure Shell менее гибка, чем FireSSH для Firefox, так как вы не можете настроить SSH туннелирование — все потому, что Firefox имеет более мощную систему расширений.
Поскольку Secure Shell — это веб-приложение Chrome, оно также доступно для Mac OS X, Linux и даже в Chrome OS.
PuTTY для ОС Windows
PuTTY является наиболее популярным приложением для подключения к SSH-серверам на Windows. Оно с полностью открытым исходным кодом и, более того, доступно в виде портативного приложения, поэтому вы можете добавить его в свой набор инструментов портативных приложений и использовать в любом месте. Интерфейс PuTTY на первый взгляд может показаться немного пугающим и сложным, но это проходит, как только вы начинаете его использовать.
PuTTY предлагает больше мощности и опций, чем другие клиенты SSH, работающие в качестве настольного приложения Windows. Как и FireSSH, PuTTY также предлагает функции SSH туннелирования. Чтобы использовать PuTTY, достаточно запустить putty.exe, ввести имя хоста (или IP-адрес) удаленного сервера, убедиться, что порт правильный, и нажать Open. PuTTY подключится к серверу и предложит ввести имя пользователя и пароль. Вы также можете сохранить информацию о сеансе, для этого нажмите опцию Default Settings затем Save и PuTTY автоматически будет использовать сохраненные настройки каждый раз, когда он открывается.
Если вы хотите настроить SSH туннелирование в PuTTY, перейдите в меню Connection -> SSH -> Tunnels.
OpenSSH для Cygwin Terminal
Если вы регулярно используете стандартную команду SSH на Linux, Mac OS X и других UNIX-подобных системах, вы можете установить и применить ту же самую команду на Windows, вместо того чтобы связываться с графическими программами. OpenSSH напрямую не совместима с Windows, но может быть установлена в составе пакета утилит типа UNIX для Windows, поставляемого Cygwin.
Если вы новичок в SSH, вы, вероятно, захотите использовать одну из графических опций выше. Однако, если у вас есть опыт использования команды SSH на других платформах, вы обнаружите, что команда OpenSSH, включенная в Cygwin, работает точно так же, как и на других платформах, с тем же синтаксисом.
Просто установите Cygwin — это большой пакет, потому что он устанавливает больше утилит, чем просто OpenSSH. Когда появится запрос на выбор пакетов, выполните поиск OpenSSH, разверните раздел Net и щелкните «Skip» слева от пакета OpenSSH. Это позволит выбрать нужный номер версии для установки.
После завершения процесса установки вы можете запустить приложение Cygwin Terminal и выполнить те же SSH-команды, что и в UNIX-подобных операционных системах.
Какое приложение лучше использовать?
И так, какой все-таки клиент SSH лучший? Это зависит от того, что вам нужно:
- Если вам нравится идея использования SSH в браузере, то несомненно вам подойдут FireSSH для Firefox или Secure Shell для Chrome. Но имейте в виду, что Secure Shell для Chrome является самым ограниченным из этих двух в нем нет SSH туннелирования.
- Если вам нужно мощное приложение SSH с графическим интерфейсом, позволяющим настраивать параметры и сохранять информацию о сеансе, используйте PuTTY. Это самый популярный клиент Windows SSH и изучить его довольно просто.
- Если вам нужна классическая команда SSH без графического интерфейса, используйте Cygwin.
Если бы нам пришлось порекомендовать одну из них, мы бы сказали, что большинству пользователей подойдет PuTTY.
Какой ваш любимый клиент SSH на Windows? Оставьте свой комментарий и дайте нам знать, особенно если мы не упомянули об этом выше.










