Windows 10: Ошибка сервера OpenSSH

Для удалённого доступа к компу на Windows 10 я установил AnyDesk. Но, иногда его было мало, т.к. нужно было что-то делать в фоне, не отвлекая пользователя. Для этой цели я поставил OpenSSH. В процессе тестирования выяснилось, что я не могу у нему подключиться с другого компа, т.к. получаю ошибку «Connection timed out»:

PS C:\Windows\system32\OpenSSH> .\ssh 192.168.1.4 -p 22
ssh: connect to host 192.168.1.4 port 22: Connection timed out

PuTTY мне выдавал нечто подобное

PuTTY Fatal Error
Network error: Connection timed out

 

Поехали по порядку (часть инструкций с MSDN)…

Установка сервера SSH

Можно было установить через Параметры:
ПриложенияУправление дополнительными компонентамиДобавить компонентOpenSSH server
Но я решил воспользоваться PowerShell — так быстрее.

 

Проверим, установлен ли компонент SSH, для этого в PowerShell выполним:

Get-WindowsCapability -Online | ? Name -like '*SSH*'

Будет примерно такой вывод:

PS C:\Windows\system32\OpenSSH> Get-WindowsCapability -Online | ? Name -like '*SSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed

Если включены SRP — Software Restriction Policies, при этом запуск dismhost.exe не разрешён явно и блокируется, то можно получить такую ошибку:

Get-WindowsCapability : The request is not supported.
At line:1 char:1
+ Get-WindowsCapability -Online | ? Name -like '*SSH*'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-WindowsCapability], COMException
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.GetWindowsCapabilityCommand

Если после проверки выяснилось, что компонент не установлен, поставим его (серверную часть и клиентскую, я выбрал сразу всё):

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Запуск и настройка

Запускаем службу SSH (под админом):

Start-Service sshd

Если планируем пользоваться SSH постоянно, то лучше выставить режим запуска службы в автоматический:

Set-Service -Name sshd -StartupType 'Automatic'

При установке SSH должно было быть создано правило в firewall, проверим:

Get-NetFirewallRule -Name *ssh*

Должен получиться такой вывод:

PS C:\Windows\system32\OpenSSH> Get-NetFirewallRule -Name *ssh*

Name                  : sshd
DisplayName           : OpenSSH Server (sshd)
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : The rule was parsed successfully from the store. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Если правило по каким-то причинам не было создано или было случайно удалено, можно создать новое:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Подключение к OpenSSH Server

Если подключаться через PowerShell, то нужно запускать PS с правами админа. Здесь я указываю номер порта, т.к. потом сменю его с 22 на какой-то другой:

.\ssh 192.168.1.64 -p 22

Если система не найдёт компонент, получим ошибку:

.\ssh : The term '.\ssh' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ .\ssh 192.168.1.64 -p 22332
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (.\ssh:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Ничего страшного, просто перейдём в папку c OpenSSH:

cd C:\Windows\System32\OpenSSH\

Если в этот раз мы получим ошибку о которой писал в самом начале статьи (Connection timed out), то переходим к следующему разделу.

Исправление ошибок

Ошибка Connection timed out может означать, что служба OpenSSH SSH Server (sshd) не запущена. Если её запустить, то ошибки быть не должно.
Это было просто и мне не помогло, т.к. у меня она была запущена, но ошибка всё равно присутствовала.
Я сейчас не стал разбираться и закапываться ещё глубже, но у меня проблема была не в этом и даже не в firewall (брандмауэре), хотя я думал на него. Проблема была в роутере Wi-Fi! Для подключения этого ноутбука я выделил гостевую сеть:
MGTS роутерНастройкиWi-FiГостевая сеть Wi-Fi
Здесь я добавил новую гостевую сеть, чтобы в случае необходимости её было проще отключать так, чтобы не прерывать доступ в интернет остальным клиентам. Переключатель «Блокировать связь между WiFi» в решении проблемы не помог.

Тем не менее данный переключатель позволит избавится от ошибки «Host unreachable», при попытке подключиться к этому компу с ConnectBot на Андроид. Нужно его переключить в положение Выключено, тогда устройства в этой Wi-Fi сети смогут взаимодействовать друг с другом.

 

Таким образом, я не нашёл идеального решения этой проблемы кроме как переключить данный ноутбук с гостевой сети Wi-Fi на основную. Тогда SSH будет работать.

 

Если будет время и желание покопаться, может потом дополню заметку новым решением.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments