Как подключиться к 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 подключился — но это совершенно неюзабельно:
Во-вторых, в случае с FreeSSHd у меня не получилось подключиться к компьютеру с Windows даже по локальной сети, не говоря уже о подключении через интернет. Вернее, подключиться получается, но сервис зависает и вылетает, управлять Windows-хостом таким образом не получится.
Поэтому, я предполагаю, что Алексу понадобился ssh-сервер на Windows для подключения к файловой системе или использования её в качестве VPN, проксирования чего-либо поверх SSH. Хотя я и сомневаюсь, что FreeSSHd позволит это делать. Ибо в-третьих: он даже не сохраняет настройки, при перезапуске сервиса всё сбивается. В общем, я очень надеюсь, что Алекс расскажет нам в комментариях о том, зачем это ему понадобилось.
Как ещё можно запустить SSH на Windows?
Есть более работоспособное решение — Powershelserver. Хотя в нём тоже есть баги, но оно хотя бы не вылетает. Поэтому я бы рекомендовал использовать именно его для подключения по SSH к виндовым серверам.
Во-первых, он стабильно работает без вылетов. И через него действительно можно управлять windows через powershell.
Все настройки нормально сохраняются. Доступны те же функции что и в FreeSSHd и даже больше — можно использовать SCP — это копирование файлов поверх SSH.
Но самый шик — это консоль! Она работает, господа!
Я легко подключился, без всяких плясок с добавлением пользователей (это нужно делать во freesshd). И та простейшая команда на просмотр таблицы маршрутизации прекрасно отработала и выдала нужную инфу. Фриссш у меня «упал» именно при попытке просмотра netstat -rn
Здесь правда видно что не отображаются русские символы. Так у нас это легко настроить, просто выставляю нужную мне кодировку на powershellserver, перезапускаю, переподключаюсь…
И вуаля!
Теперь мы имеем полноценный SSH и можем полностью управлять Windows через консоль.
Кстати, Microsoft eщё летом объявила о том, что собирается разработать нативную поддержку SSH для Powershell в новых версиях Windows. Есть анонсы новости на хабре и на pcweek(и ещё). Поэтому нам только остаётся ждать с нетерпением этого знакового события, поскольку это действительно будет прорывом для работы в гетерогенных сетях.
Я не стал проверять остальные функции — sftp и scp, но почему-то уверен, что они тоже будут прекрасно работать.
Как открыть снаружи SSH-порт?
Итак, мы подобрались к тому сокровенному, ради чего вообще и затеялась эта статья. Ответу на вопрос читателя.
Проброс порта на роутере или модеме
Для подключения к компьютеру извне, действительно нужно сделать NAT, или, в частном случае PAT — проброс порта с локальной машины на внеший IP-адрес. Как это сделать зависит от устройства, которое используется в качестве шлюза. Это может быть ADSL-модем или домашний роутер. В большинстве случаев подробные инструкции для вашего девайса легко найти по запросам типа «проброс порта модель_устройства» или «port forwarding модель_устройства»
Вот так это выглядит на моем домашнем роутере Zyxel Keenetic Lite :
А вот так это выглядит на ADSL-модеме c функционалом роутера Linksys WAG200G, оказавшимся под рукой:
Кроме того, у некоторых провайдеров это может быть невозможно сделать технически, поскольку они не предоставляют «белый» внешний IP-адрес.
Проброс порта на удалённый сервер с помощью SSH-туннеля
В таком случае, для подключения по SSH может быть доступен единственный способ — туннель с локальной Windows-машины (той самой, к которой хотим подключиться по SSH) на удалённый сервер. В этом случае у вас должен быть SSH-доступ к какому-то серверу в интернете.
Такой проброс легко сделать с помощью простого SSH-клиента Putty (есть и альтернативные 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.
Просто наберите в командной строке через пробел:
Если порт доступен, то вы увидите что-то вроде такого:
Если порт по каким-то причинам недоступен — то вы увидите либо «connection refused» либо «connection timeout». В первом случае это будет мгновенно, и означает что порт закрыт файрволом.
Во втором случае это будет похоже на «зависание» и может длиться до нескольких минут — телнет-клиент будет пытаться установить соединение. Это может означать также блокировку файрволлом, но уже другого типа. Либо просто что указанный хост недоступен или порт на нём закрыт.
Если вы смогли подключиться телнетом, то нажмите комбинацию клавиш Ctrl+] и введите quit, затем Enter. Иначе не получится прервать сессию и придётся открывать новое окно консоли, если она вам ещё нужна.
Как открыть порт 3322 на компе?
Комментарий на отдельной страницеЗдравствуйте. Спасибо за ответ!
SSH туннель решил поднять на домашнем компьютере, чтобы к нему цепляться из любой точки доступа, как с чужого компа, так и с телефона, только в целях безопасности, пока нахожусь в интернете. Сами понимаете, что открытые точки Wi-Fi не безопасны.
По поводу сервера FreeSSHd: установленная версия 1.3.1, подключался через PuTTY от друга по локалке — всё работает, как сам туннель, так и Shell, и SFTP (для этого протокола использовал программу WinSCP).
По настройкам сервера — выключен Telnet, авторизация пользователя только по паролю. Пытался авторизоваться по ключам, созданным в PuTTY, но почему-то не подключается, как с паролем на сами ключи, так и без него. Появлялась ошибка: «Server refused public-key signature despite accepting key!». Ключи по разному пробовал составлять и с разной длинной (удалял лишние строки в начале и конце ключа, выстраивал ключ в одну строку — всё никак).
Не большие подробности относительно ситуации на моём компьютере: роутера и модема нет, я подключён по витой паре сразу в ноутбук, и нахожусь за NAT провайдера, ip предоставляется серый динамический, поэтому и хочу узнать как же подключится по интернету. Извиняюсь, что сразу не написал..
При попытке подключиться на внешний ip (смотрел на 2ip.ru) соответственно подключения не было.
Интересует ещё вопрос: при подключении по SSH туннелю, трафик сразу шифруется или на компе-сервере надо ещё ставить прокси-сервер? Комментарий на отдельной странице
Прокси с шифрованием через домашний компьютер. Теперь всё понятно. Вы просто хотите сделать для себя прокси таким замысловатым способом :) Но всё же, это имеет смысл, только в тех случаях, если у вас есть прямой доступ по SSH без бубна. Учитывая серый IP от провайдера, у вас вообще невозможно подключаться к домашнему компьютеру без сервера с «белым» ip-адресом и прямым доступом по SSH. Ну а если есть такой сервер, то необходимость в домашнем компьютере вообще отпадает можно использовать сразу сервер.
В Вашем случае проще купить доступ к персональному прокси и использовать его для этих целей. Они сейчас $1-$2 в месяц стоят, не больше.
Если же вы хотите использовать именно SSH-туннели, то я бы порекомендовал взять самый дешёвый тариф у хостера, предоставляющего доступ по SSH. Тогда вы сможете осуществить всё задуманное и даже больше. Я, например, использую дешёвый безлимитный хостинг от HTS всего за 90 рублей в месяц уже четвертый год .
Да, SSH сам по себе шифрует абсолютно всё, что пропускает через себя. При использовании туннелей прокси не нужен, ибо ваш туннель сам по себе будет работать уже как Socks-прокси. А по поводу ключей, попробуйте всё же powershelserver. Комментарий на отдельной странице
Очень помогли, спасибо, особенно за ссылку HTS, будем пробовать.
Комментарий на отдельной странице