Как подключиться к Windows по SSH через интернет?



Читатель нашего сайта  спрашивает:

Здравствуйте! Интересует вопрос: как подключиться по SSH к домашнему компьютеру через интернет. Дома установлен FreeSSHd сервер.  Я так понимаю надо как-то открыть порт 22 на внешнем IP?Alex

 

Да, часто возникает необходимость подключиться к компьютеру через интернет.  Я в той статье много о чём рассказывал, а здесь мы будем говорить исключительно об SSH, раз уж Alex любезно предоставил нам эту возможность. К тому же, мне самому безумно интересен SSH, а здесь ещё  и на Windows…  ммм.

Что такое SSH и зачем он нужен?

Дело в том, что SSH —  это  Secure SHell.  Протокол для безопасного доступа к оболочке управления. Поэтому оно предоставляет доступ именно к командной строке, ибо Shell — переводится как оболочка и здесь в значении текстовая оболочка управления.  Но вообще, этот протокол примечателен тем, что он позволяет пропускать внутри себя любой другой трафик, причем в зашифрованном виде. Так, протокол безопасного подключения к файловой системе называется SFTP и работает поверх SSH.   Но может туннелировать абсолютно любые другие соединения — будь то HTTP или даже RDP.  По сути получается «VPN на коленке». 




 

Здесь Алекс уже сделал полдела, он установил и запустил на домашнем компьютере FreeSSHd.  Это позволяет подключиться к Windows по SSH.  В данном случае — «позволяет» — это сказано очень сильно. Потому как это решение работает на Виндовс кое-как.  Во-первых, у неё нет приличного текстового интерфейса — командной строки, для управления.

По крайней мере штатный — cmd — мало что позволяет сделать с удалённой машиной.  Есть ещё Powershell — это уже более современное и мощное решение. Freesshd позволяет сменить консоль на powershell, но я к ней так и не смог подключиться. К CMD подключился — но это совершенно неюзабельно:

podklyuchenie-windows-consol-ssh

Во-вторых, в случае с FreeSSHd у меня не получилось подключиться к компьютеру с Windows даже по локальной сети, не говоря уже о подключении через интернет. Вернее, подключиться получается, но сервис зависает  и вылетает, управлять Windows-хостом таким образом не получится.

Завис freesshd и вылетел при подключении

Завис freesshd и вылетел при подключении

Поэтому, я предполагаю, что Алексу понадобился ssh-сервер на Windows для подключения к файловой системе или использования её в качестве VPN, проксирования чего-либо поверх SSH.  Хотя я и сомневаюсь, что FreeSSHd позволит это делать. Ибо в-третьих: он даже не сохраняет настройки, при перезапуске сервиса всё сбивается.   В общем, я очень надеюсь, что Алекс расскажет нам в комментариях о том, зачем это ему понадобилось.

Как ещё можно запустить SSH на Windows?

Есть более работоспособное решение — Powershelserver.  Хотя в нём тоже есть баги, но оно хотя бы не вылетает. Поэтому я бы рекомендовал использовать именно его для подключения по SSH к виндовым серверам.








Скачал и установил powershellserver

Скачал и установил powershellserver

Во-первых, он стабильно работает без вылетов.  И через него действительно можно управлять windows через powershell.

Включил нужные опции и запустил

Включил нужные опции и запустил

Все настройки нормально сохраняются.  Доступны те же функции что и в FreeSSHd и даже больше — можно использовать SCP — это копирование файлов поверх SSH.

Но самый шик — это консоль! Она работает, господа!

proverka-porta-podkluchenie-powershell-ssh

Я легко подключился, без всяких плясок с добавлением пользователей (это нужно делать во freesshd). И та простейшая команда на просмотр таблицы маршрутизации прекрасно отработала и выдала нужную инфу.  Фриссш у меня «упал» именно при попытке просмотра netstat -rn

Здесь правда видно что не отображаются русские символы. Так у нас это легко настроить, просто выставляю нужную мне кодировку на powershellserver, перезапускаю, переподключаюсь…

nastroika-kodirovki-ssh-windows

Настройка кодировки в Powershellserver

 

И вуаля!

Подключение к консоли Windows по SSH!

Подключение к консоли Windows по SSH!

Теперь мы имеем полноценный SSH и можем полностью управлять Windows через консоль.

 

Microsoft создаст собственное решение для SSH

Кстати, Microsoft eщё летом объявила о том, что собирается разработать нативную поддержку SSH для Powershell в новых версиях Windows.  Есть анонсы новости  на хабре и на pcweekещё).  Поэтому нам только остаётся ждать с нетерпением этого знакового события, поскольку это действительно будет прорывом для работы в гетерогенных сетях.

Я не стал проверять остальные функции — sftp и scp, но почему-то уверен, что они тоже будут прекрасно работать.

Как открыть  снаружи SSH-порт?

Итак, мы подобрались к тому сокровенному, ради чего вообще и затеялась эта статья.  Ответу на вопрос читателя.

Проброс порта на роутере или модеме

Для подключения к компьютеру извне, действительно нужно сделать NAT, или,   в частном случае PAT — проброс порта с локальной машины на внеший IP-адрес.  Как это сделать  зависит от устройства, которое используется в качестве шлюза.   Это может быть ADSL-модем или домашний роутер.  В большинстве случаев подробные  инструкции для вашего девайса  легко найти по запросам типа «проброс порта модель_устройства»  или «port forwarding модель_устройства»

Вот так это выглядит на моем домашнем роутере Zyxel Keenetic Lite :

Как открыть порты для подключения снаружи на Zyxel Keenetic

Как открыть порты для подключения снаружи на Zyxel Keenetic

А вот так это выглядит на ADSL-модеме  c функционалом  роутера  Linksys WAG200G, оказавшимся под рукой:

probros-portov-liksys-wag200g

 

Кроме того, у некоторых провайдеров это может быть невозможно сделать технически, поскольку они не предоставляют «белый» внешний IP-адрес.

Проброс порта на удалённый сервер с помощью SSH-туннеля

В таком случае, для подключения по SSH может быть доступен единственный способ — туннель с локальной Windows-машины (той  самой, к которой хотим подключиться по SSH) на удалённый сервер.   В этом случае у вас должен быть SSH-доступ к какому-то серверу в интернете.

Настройка "обратного" туннеля SSH

Настройка «обратного» туннеля SSH

 

Такой проброс легко сделать с помощью простого SSH-клиента Putty (есть и альтернативные ssh-клиенты)  Затем можно будет подключиться на этом самом удалённом сервере через проброшенный порт.

Подключение Windows по SSH через обратный туннель

Подключение Windows по SSH через обратный туннель

Здесь получилась по сути петля.  Мы открываем SSH сессию с Windows на удалённый сервер, а внутри этого подключения у нас туннелируется SSH-порт самой Windows Powershellserver (или FreeSSHd) на локальный порт 3322 удалённого сервера. И в этой же сессии мы теперь подключаемся обратно к Windows на Powershell через этот самый порт 3322…  Я надеюсь, вы не запутались. Но… This is magic, друзья! :) SSH-туннели это особый мир, с их помощью можно вытворять невероятные штуки, открывать такие двери, что все безопасники будут горько плакать, если бы они вдруг узнали обо всём этом… Ну да ладно

Ну если вам нужно расшарить SSH-порт винды в мир, достаточно в настройках обратного туннеля в качестве destination указать не localhost:3322, а  ip_server:3322.  Сможете подключаться к винде по SSH отовсюду, где есть доступ к этому самому серверу.

Как проверить правильно ли проброшен порт?

Очень просто. Нужно проверить открыт ли он. В случае с SSH  открытый порт будет отвечать сообщением о своей версии.  Самый простейший способ проверки порта  — утилита telnet.

Просто наберите в командной строке через пробел:

Просто наберите в командной строке через пробел:
telnet домен_или_IP порт

Если порт доступен, то вы увидите что-то вроде такого:

proverka-porta-ssh-telnetom

Ответ SSH если порт доступен

Если порт по каким-то причинам недоступен — то вы увидите  либо «connection refused» либо «connection timeout». В первом случае это будет мгновенно, и означает что порт закрыт файрволом.

Во втором случае это будет похоже на «зависание» и может длиться до нескольких минут — телнет-клиент будет пытаться установить соединение.   Это может означать также блокировку файрволлом, но уже другого типа. Либо просто что указанный хост недоступен или порт на нём закрыт.

Если  вы смогли подключиться телнетом, то нажмите комбинацию клавиш Ctrl+]  и введите quit, затем Enter. Иначе   не получится прервать сессию и придётся открывать новое окно консоли, если она вам ещё нужна.

 

Комментариев

  1. Alex :

    Ответить

    • drmotor :

  2. Alex :

    Ответить

Сохраните для друзей или чтобы прочесть в другой раз:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>