В современных версиях Windows уже есть встроенный SSH сервер на базе пакета OpenSSH. В этой статье мы покажем, как установить и настроить OpenSSH сервер в Windows 10/11 и Windows Server 2022/2019 и подключиться к нему удаленно по защищенному SSH протоколу (как к Linux).
Установка сервера OpenSSH в Windows
Пакет OpenSSH Server включен в современные версии Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в виде Feature on Demand (FoD). Для установки сервера OpenSSH достаточно выполнить PowerShell команду:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability –Online
Или при помощи команды DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Если ваш компьютер подключен к интернету, пакет OpenSSH.Server будет скачан и установлен в Windows.
Также вы можете установить сервер OpenSSH в Windows через современную панель Параметры (Settings -> Apps and features -> Optional features -> Add a feature, Приложения -> Управление дополнительными компонентами -> Добавить компонент. Найдите в списке OpenSSH Server и нажмите кнопку Install).
На изолированных от интернета компьютерах вы можете установить компонент с ISO образа Features On Demand (доступен в личном кабинете на сайте Microsoft: MSDN или my.visualstudio.com). Скачайте диск, извлеките его содержимое в папку c:\FOD (достаточно распаковать извлечь файл
OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab
), выполните установку из локального репозитория:
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source c:\FOD
Также доступен MSI установщик OpenSSH для Windows в официальном репозитории Microsoft на GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Например, для Windows 10 x64 нужно скачать и установить пакет OpenSSH-Win64-v8.9.1.0.msi. Следующая PowerShell команда скачает MSI файл и установит клиент и сервер OpenSSH:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i c:\users\root\downloads\OpenSSH-Win64-v8.9.1.0.msi
Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed
Настройка SSH сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
- ssh-agent (OpenSSH Authentication Agent) – можно использовать для управления закрытыми ключами если вы настроили SSH аутентификацию по ключам;
- sshd (OpenSSH SSH Server) – собственно сам SSH сервер.
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
С помощью nestat убедитесь, что теперь в системе запущен SSH сервер и ждет подключений на порту TCP:22 :
netstat -na| find ":22"
Проверьте, что включено правило брандмауэра (Windows Defender Firewall), разрешающее входящие подключения к Windows по порту TCP/22.
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled ---- ----------- ----------- ------- OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True
Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Рассмотрим, где храниться основные компоненты OpenSSH:
- Исполняемые файлы OpenSSH Server находятся в каталоге
C:\Windows\System32\OpenSSH\
(sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т.д.) - Конфигурационный файл sshd_config (создается после первого запуска службы):
C:\ProgramData\ssh
- Файлы authorized_keys и ssh ключи можно хранить в профиле пользователей:
%USERPROFILE%\.ssh\
Sshd_config: Конфигурационный файл сервера OpenSSH
Настройки сервере OpenSSH хранятся в конфигурационном файле %programdata%\ssh\sshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор (я предпочитаю notepad++). Можно открыть с помощью обычного блокнота:
start-process notepad C:\Programdata\ssh\sshd_config
Например, чтобы запретить SSH подключение для определенного доменного пользователя (и всех пользователей указанного домена), добавьте в конце файле директивы:
DenyUsers winitpro\[email protected] DenyUsers corp\*
Чтобы разрешить подключение только для определенной доменной группы:
AllowGroups winitpro\sshadmins
Либо можете разрешить доступ для локальной группы:
AllowGroups sshadmins
По умолчанию могут к openssh могут подключаться все пользователи Windows. Директивы обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.
Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.
DenyGroups Administrators
Следующие директивы разрешают SSH доступ по ключам (SSH аутентификации в Windows с помощью ключей описана в отдельной статье) и по паролю:
PubkeyAuthentication yes PasswordAuthentication yes
Вы можете изменить стандартный SSH порт TCP/22, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.
После любых изменений в конфигурационном файле sshd_config нужно перезапускать службу sshd:
restart-service sshd
Подключение по SSH к Windows компьютеру
Теперь вы можете попробовать подключиться к своей Windows 10 через SSH клиент (в этом примере я использую putty).
В этом примере
alexbel
– имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.
Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:
-
alex@server1
– локальный пользователь Windows -
[email protected]@server1
–пользователь Active Directory (в виде UPN) или аккаунт Microsoft/ Azure(Microsoft 365) -
winitpro\alex@server1
– NetBIOS формат имени
В домене Active Directory можно использовать Kerberos аутентификацию в SSH. Для этого в sshd_config нужно включить параметр:
GSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH сервер с Windows компьютера в домене из сессии доменного подключается. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:
ssh -K server1
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем Да, и в открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
admin@win10tst C:\Users\admin>
В командной строке вы можете выполнять различные команды, запускать скрипты и программы.
Я предпочитаю работать в командной строке PowerShell. Чтобы запустить интерпретатор PowerShell, выполните:
powershell.exe
Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр такой командой:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell (об этом свидетельствует приглашение
PS C:\Users\admin>
).
В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
Логи SSH подключений в Windows
В Windows логи подключений к SSH серверу по-умолчанию пишутся не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль Event Viewer (
eventvwr.msc
>) и перейдите в раздел Application and services logs -> OpenSSH -> Operational.
При успешном подключении с помощью к SSH серверу с помощью пароля в журнале появится событие:
EventID: 4 sshd: Accepted password for root from 192.168.31.53 port 65479 ssh2
Если была выполнена аутентификация с помощью SSH ключа, событие будет выглядеть так:
sshd: Accepted publickey for locadm from 192.168.31.53 port 55772 ssh2: ED25519 SHA256:FEHDEC/J72Fb2zC2oJNb45678967kghH43h3bBl31ldPs
Если вы хотите, чтобы логи писались в локальный текстовый файл, нужно в файле sshd_config включить параметры:
SyslogFacility LOCAL0 LogLevel INFO
Перезапустите службу sshd и провеьте, что теперь логи SSH сервера пишутся в файл C:\ProgramData\ssh\logs\sshd.log
В статье нет ничего про авторизацию по ключам и про поддержку проброса портов. Т.е. я конечно, понимаю, что раз есть SSH сервер, то и проброс портов должен быть. Но это же делало M$, а у них свой взгляд на то что является стандартом. Тоже самое касаемо авторизацию по ключам — M$ могли «изобрести велосипед» с фирменными квадратными колесами, потому что «так лучше». Вспомним как они изобрели висту, а потом win8 с интерфейсом «метро». В обоих случаях уверяли как это удобно и классно.
В тексте я упомянул, что в следующей статье покажу авторизацию по ключам. Она работает в OpenSSH. Есть нюансы — но все довольно логично и достойно.
Как и проброс портов. Он тоже заводится. Беру на заметку и зту тему.
Подписывайтесь на обновления 🙂
Как и обещал, вот статья о пробросе портов в SSH туннеле под Windows с помощью OpenSSH. Все работает из коробки: https://winitpro.ru/index.php/2019/10/29/windows-ssh-tunneling/
Авторизация в Windows по SSH ключам: https://winitpro.ru/index.php/2019/11/13/autentifikaciya-po-ssh-klyucham-v-windows/
Подскажите, если прописываю
DenyUsers corp\*
AllowGroups corp\sshadmins
то зайти никто не может, если только группу с разрешением AllowGroups corp\sshadmins, то зайти могут все пользователи.
Как правильно прописать, если необходимо, чтобы подключиться могла только определенная группа с правами администратора, а обычные сотрудники не могли.
Спасибо.
По умолчанию могут к openssh могут подключаться все. Директивы обрабатываются в следуюшем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.
Если вы разрешили доступ только одной группе, остальные должны быть запрешен.
Согласно man вроде все ок:
AllowGroups
This keyword can be followed by a list of group name patterns,
separated by spaces. If specified, login is allowed only for
users whose primary group or supplementary group list matches one
of the patterns.
Попробуте создать локальную группу и добавить в нее доменную группу:
AllowGroups localsshadmin
Или попробуйте еще такой формат:
AllowGroups domain?admins
При подключении появляется упомянутое в статье окно запрос на добавление ключа. После требует авторизацию через пароль. Ввожу свой пароль, но он почему то оказывается неверным. Проверил несколько раз, ошибки точно нет. Под этим паролем я в систему вхожу. У меня пароль и пин код, не подходит ни то ни другое
Какая версия Windows 10 и ssh (Get-Command ssh.exe)?
Пробовали подключиться к разным хостам? Пароль не на русском:
Вопрос все настроил установил по умолчанию shell на powershell
Только не работает автокомплит в удаленной сесии.
Это решается как то?
Windows 10 1909 ssh клиент к Win 10 1909 ssh-сервер, автокомплит для powershell шела работает. Проверил.
Не подскажите как выводить информацию в out-gridview из ssh подключения! Окно не появляется.
get-credential выводиться в консоль, а всё что окном не увидеть. Или есть какой обход отобразить окно?pwsh 7 версия тоже не помогла.
Насколько я помню, вывод графических диалоговых окна через OpenSSH сессию не поддерживается, такие как Out-GridView, Show-Command
Но можно переключить powershell на получение параметров из консоли. Например, для Get-Credential работает такой трюк:
$key = “HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds”
Set-ItemProperty $key ConsolePrompting True
Get-Credential
А где файл для настройки клиента? (ssh_config) как на UNIX хостах.
Не могу настроить X11 н сервере.
Пользовательский конфиг
%USERPROFILE%\.ssh\config
Глобальный конфиг:
%PROGRAMDATA%\ssh\ssh_config
Настроил OpenSSH. Когда я запускаю команды git pull, push на самом компьютере все отлично работает, а когда подключаюсь через ssh удаленно и запускаю эти же команды компьютер ничего не отвечает. Не подскажете как можно решить эту проблему?
Профиль пользователя один и тот же?
ЛОги какие-то есть?
Не нашел конфигов. Только дефолтный в system32. 20H4.
SSH(Windows) штука полезная, спору нет. Настроил для себя под все наши корпоративные изолированные сети. Собственно пользую по сути только команду ping для проверки связи с локальными ip устройствами. Есть идея дать доступ выездным сотрудникам и иметь возможность так же проверять связь, НО! Сколько не искал в сети информации, всё тщетно. Как ограничить пользователя только лишь определённым перечнем вводимых команд? Логин и ping(с возвратом результата естественно) к примеру. Очень много времени отнимет банальная проверка связи, особенно когда наяривают по 50 раз за день 😉
Не понял, вы хотите ограничить команды в удаленной SSH сессии?
Как вариант PowerShell JEA — но тут нужно потроить схему, подходящую под ваши цели: https://winitpro.ru/index.php/2020/09/29/powershell-just-enough-administration-jea-delegirovaniye-admin-prav-polzovatelyam/
Есть ли некое подобие Fail2ban для SSH в Windows?
Готового не видел. Если только что-то по аналогии запилить на блокирование портов в файерволе…. https://winitpro.ru/index.php/2019/10/02/blokirovka-rdp-atak-firewall-powershell/
Здравствуйте. Настроил доступ с одного пк на другой по SSH. На одном Windows Server 2012R2 на другом WIndows Server 2008r2. Смысл в том, чтобы с помощью Duplicati делать резервное копирование по SFTP с WIndows Server 2008r2 в общую папку на Windows Server 2012R2, которая находится на диске D. Авторизацию по ключам все сделал, подключается, но при копировании просто не видит общую папку. Как то общую папку надо прописать для пользователя ssh? Подскажите
Не совсем понял что вы делаете и что хотите получить на выходе.
кто инициирует соединение? какием клиентом идет резевное копирование, какие пути используются.
Если ввожу netstat -na| find «:22»
(у меня windows 11)
то выдват:
FIND: Неправильный формат параметра
запускайте команду в cmd.exe, а не в консоли powershell
Можно использовать Get-NetTCPConnection -LocalPort 22, чтобы не прыгать между PS и CMD
Спасибо за статью. Всё отлично. Интересует как сделать тунель на андроиде.
Подскажите плииз.
Статья хорошая, понравилась. Сделал как написано, по ssh с linux в windows ходит и обратно, но это если я руками ввожу пароль. Если я пытаюсь rsync-ом c linux на windows пойти и синхронизировать 2 папки(на виндовс и на линукс) и скопировать данные на linux c windows, linux говорит что пермишен денай. Авторизация по паролю, пользователи одинаковые, пароли одинаковые. Дальше не разобрался, пока. Подскажите пожалуйста где я не правильно что-то сделал, или еще не сделал!
Так не работает:
Add-WindowsCapability -Online -Name OpenSSH.Server*
Рабочий вариант:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online
Вот такой скриптик получился:
# Install OpenSSH.Server
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online
# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType ‘Automatic’
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name «OpenSSH-Server-In-TCP» -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output «Firewall Rule ‘OpenSSH-Server-In-TCP’ does not exist, creating it…»
New-NetFirewallRule -Name ‘OpenSSH-Server-In-TCP’ -DisplayName ‘OpenSSH Server (sshd)’ -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output «Firewall rule ‘OpenSSH-Server-In-TCP’ has been created and exists.»
}
Добавьте информацию по логам OpenSSH. По умолчанию они пишутся через ETWв журнал Event Viewer -> OpenSSH -> Operational.
Чтобы писать логи в текстовый файл, нужно в sshd_config поправить директивы:
SyslogFacility LOCAL0
LogLevel Debug3
А какой пароль вводить при подключении? Пароль от учетной записи на компьютере, говорит неверный
Если аутентфикация по паролю — вводите пароль пользователя. Если по ключу — пароль к ключу (если задан)
Где папка .ssh с ключами? В win 10 была в юзерс/ваша_учетка
Про SSH аутентфикацию с ключами в Windows подробно описано здесь https://winitpro.ru/index.php/2019/11/13/autentifikaciya-po-ssh-klyucham-v-windows/
У еня почему-то всегда пишет что неправильный пароль, хотя я 100% ввожу свой пароль
Имя пользователя проверил через whoami
Настраивал все по вашим статьям для сервера и клиента
Есть два компа с Windows 11
на одном клиент SSH на втором сервер SSH
на сервере sshd_config с такими настройками
StrictModes no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
Subsystem sftp sftp-server.exe
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
сгенерировал ключи на клиенте, командой
scp C:\Users\simka\.ssh\id_ed25519.pub [email protected]:C:\Users\file\.ssh\authorized_keys
скопировал на сервер
И все равно при подключении требует пароль
ssh [email protected] -vvv
вот подробные логи
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug3: Failed to open file:C:/Users/simka/.ssh/config error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2
debug2: resolve_canonicalize: hostname 192.168.0.90 is address
debug2: ssh_connect_direct
debug1: Connecting to 192.168.0.90 [192.168.0.90] port 22.
debug1: Connection established.
debug3: Failed to open file:C:/Users/simka/.ssh/id_rsa error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_rsa.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_rsa type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_rsa-cert error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_rsa-cert.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_rsa-cert type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_dsa error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_dsa.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_dsa type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_dsa-cert error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_dsa-cert.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_dsa-cert type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_ecdsa error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_ecdsa.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_ecdsa type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_ecdsa-cert error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_ecdsa-cert.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_ecdsa-cert type -1
debug1: identity file C:\\Users\\simka/.ssh/id_ed25519 type 3
debug3: Failed to open file:C:/Users/simka/.ssh/id_ed25519-cert error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_ed25519-cert.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_ed25519-cert type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_xmss error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_xmss.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_xmss type -1
debug3: Failed to open file:C:/Users/simka/.ssh/id_xmss-cert error:2
debug3: Failed to open file:C:/Users/simka/.ssh/id_xmss-cert.pub error:2
debug1: identity file C:\\Users\\simka/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_8.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_for_Windows_8.1
debug1: match: OpenSSH_for_Windows_8.1 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 192.168.0.90:22 as ‘file’
debug3: hostkeys_foreach: reading file «C:\\Users\\simka/.ssh/known_hosts»
debug3: record_hostkey: found key type ECDSA in file C:\\Users\\simka/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 192.168.0.90
debug3: Failed to open file:C:/Users/simka/.ssh/known_hosts2 error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_known_hosts error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_known_hosts2 error:2
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],[email protected],ssh-rsa-cert-v01 @openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected],zlib
debug2: compression stoc: none,[email protected],zlib
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: compression: none
debug1: kex: client->server cipher: [email protected] MAC: compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:+Ix+4zxcX/MkmWRwELfWIVfqLtsv7xUQe+FdiOwCygA
debug3: hostkeys_foreach: reading file «C:\\Users\\simka/.ssh/known_hosts»
debug3: record_hostkey: found key type ECDSA in file C:\\Users\\simka/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 192.168.0.90
debug3: Failed to open file:C:/Users/simka/.ssh/known_hosts2 error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_known_hosts error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_known_hosts2 error:2
debug1: Host ‘192.168.0.90’ is known and matches the ECDSA host key.
debug1: Found key in C:\\Users\\simka/.ssh/known_hosts:1
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey in after 134217728 blocks
debug3: unable to connect to pipe \\\\.\\pipe\\openssh-ssh-agent, error: 2
debug1: pubkey_prepare: ssh_get_authentication_socket: No such file or directory
debug1: Will attempt key: C:\\Users\\simka/.ssh/id_rsa
debug1: Will attempt key: C:\\Users\\simka/.ssh/id_dsa
debug1: Will attempt key: C:\\Users\\simka/.ssh/id_ecdsa
debug1: Will attempt key: C:\\Users\\simka/.ssh/id_ed25519 ED25519 SHA256 hnhjtQnl8SdtSjE/GtLKTiMcLijsyNzKNY7ng+jj04
debug1: Will attempt key: C:\\Users\\simka/.ssh/id_xmss
debug2: pubkey_prepare: done
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: C:\\Users\\simka/.ssh/id_rsa
debug3: no such identity: C:\\Users\\simka/.ssh/id_rsa: No such file or directory
debug1: Trying private key: C:\\Users\\simka/.ssh/id_dsa
debug3: no such identity: C:\\Users\\simka/.ssh/id_dsa: No such file or directory
debug1: Trying private key: C:\\Users\\simka/.ssh/id_ecdsa
debug3: no such identity: C:\\Users\\simka/.ssh/id_ecdsa: No such file or directory
debug1: Offering public key: C:\\Users\\simka/.ssh/id_ed25519 ED25519 SHA256 hnhjtQnl8SdtSjE/GtLKTiMcLijsyNzKNY7ng+jj04
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: C:\\Users\\simka/.ssh/id_xmss
debug3: no such identity: C:\\Users\\simka/.ssh/id_xmss: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: userauth_kbdint: disable: no info_req_seen
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred:
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
debug3: failed to open file:C:/dev/tty error:3
debug1: read_passphrase: can’t open /dev/tty: No such file or directory
[email protected]‘s password:
Права на C:\Users\file\.ssh\authorized_keys (Система, Администраторы)
Спасибо за ваш сайт! Очень много полезной инфы. Важное дело делаете.
И за эту статью спасибо. Очень жизненная тема. Пытался по вашей статье поиграться с SSH. Но не все получилось. С win10 все окей, а вот win11 траблы у меня. Во-первых SSH сервера нет ни там, ни там. Есть только SSH клиент. Сервер надо ставить. На 10ке все поставил и подключился без проблем. А вот на 11ой не получается. Power Shell во время установки пишет отказано в доступе.
Компы в рабочей группе. Логин и пароль одинаковый и там и там. TrustedHosts настроен. Power Shell удаленно подключается. Даже комп перезагрузить могу. А программу установить не выходит.
Пробовал и так и так:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability –Online
и даже вот так: dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Итог один:
Отказано в доступе.
+ CategoryInfo : NotSpecified: (:) [Add-WindowsCapability], COMException
+ FullyQualifiedErrorId : Microsoft.Dism.Commands.AddWindowsCapabilityCommand
Видимо в 11 версии что то новое прикрутили
В логах вот:
Контейнер ошибки , тип 0
Имя события: CbsPackageServicingFailure2
Отклик: Нет данных
Идентификатор CAB: 0
Сигнатура проблемы:
P1: 10.0.22000.2474
P2: OpenSSH-Server-Package
P3: 10.0.22000.1
P4: amd64
P5: unknown
P6: 80070005
P7: CBS Other
P8: Absent
P9: Absent
P10: DISM Package Manager Provider
Забыл кое-что)) Тоже самое в локальной консоли PS прекрасно работает. Проблема где то в удаленном подключении
Написал скрипты
установка ssh
https://github.com/Montigomo/PwshScripts/blob/master/Modules/Agt.Install/Public/Install-OpenSSH.ps1
настройка
https://github.com/Montigomo/PwshScripts/blob/master/Modules/Agt.Install/Public/Set-OpenSSH.ps1
запускаю на удаленной машине и получаю доступ по ssh с pwsh в консоли.
Да там некоторые фунции юзаются что лежат в этойже директории
https://github.com/Montigomo/PwshScripts/tree/master/Modules/Agt.Install/Public
привет! 🙂
пред запуском:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi
добавь это, пожалуйста:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
После подключения длина строки 30 символов, в mate терминале сейчас 146, выглядит убого и не читаеемо при длинных строках :
Windows PowerShell
Copyright (C) 2014 Microsoft C
orporation. All rights reserve
d.
PS C:\Users\admin> get-date
Friday, October 27, 2023
10:05:45 AM
PS C:\Users\admin>
Как победить?
Доброго времени суток.
Подскажите — редактирую файл C:\ProgramData\ssh\sshd_config
Сохраняю без расширения.
Перезапускаю службу SSHD
Ошибка 1607
Возвращаю исходный файл sshd_config (заранее скопированный)
Служба запускается.
Как тогда внести изменения в этот файл для настройки?
Win server 2012 R2
OpenSSH-Win64 9.5
Возможно ошибка в синтаксисе файла (часто бывает затык с переносами строки)
Всё просмотрел с синтаксисом вроде всё в порядке. Стоит только внести изменения запускаю службу ошибка 1607. Применял патч как в инструкции для определения прав пользователя, ничего. Из архива сделанного заранее восстанавливаю исходные файлы в каталог ssh всё равно ошибка. Помогает только удаление и переустановка SSh, пока ничего не трогаешь работает, но настроить не получается.
Проблема решена.
на папку C:\ProgramData\ssh и всё что в ней
Владелец — Администраторы
Разрешения
СИСТЕМА — полные права
Администраторы — полные права
Убрал наследования и прописал вручную владельца и разрешения и всё заработало.
После сохранения sshd_config в natepad ++ папке C:\ProgramData\ssh добавлялся в разрешении пользователь под которым сеанс, пока его не уберёшь при перезапуске SSH выскакивала ошибка 1607
Спасибо за то, что поделились решением!
Действительно, там были были заморочки с разрешениями на файл sshd_config, у меня так были пару раз проблемы с ключами. но не знал что это может влиять на службу.
Get-WindowsCapability -Online | ? Name -like ‘OpenSSH.Ser*’
namo : openssh.serever***0.0.1.0
state: installed
Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd
Для корректной работы «SSH-сервера», нужно добавить разрешающие правила в Windows Defender Firewall
Авторизуемся под учетными данными нашей виртуальный машины и переходим по пути «Control Panel» -> «System and Security» -> «Windows Defender Firewall»
Открываем параметр «Windows Defender Firewall» и кликаем по пункту «Advanced Settings»
Выбираем пункт «Inbound Rules» и создаем новое правило при помощи кнопки «New Rule»
Выбираем тип правила «Port»
Указываем протокол «TCP» и порт «2222»
Разрешаем подключение к выбранному порту «Allow the connection»
Выбираем тип сетей, где будет доступен протокол
Называем правило «SSH» и нажимаем кнопку «Finish» для завершения создания правила
Открываем конфигурацию «SSH-сервера» для редактирования
изменяем port 2222
открываем
start-process notepad C:\Programdata\ssh\sshd_config
permitRootLogin yes
PasswordAuthentication yes
permitEmptyPassword no
restart-service sshd
открываем hq-r
iptables -t nat -A PREROUTING —dst 1.1.1.100 -p tcp —dport 22 -j DNAT —to-destination 192.168.0.60:2222
ip6tables -t nat -A PREROUTING —dst 1110:a::100 -p tcp —dport 22 -j DNAT —to-destination 192:168:d::6:2222
dpkg-reconfigure iptables-persistent
[ Виртуальная машина HQ-SRV ]
Авторизуемся под учетными данными нашей виртуальный машины и переходим по пути «Control Panel» -> «System and Security» -> «Windows Defender Firewall»
Открываем параметр «Windows Defender Firewall» и кликаем по пункту «Advanced Settings»
Выбираем пункт «Inbound Rules» и создаем новое правило при помощи кнопки «New Rule»
Выбираем тип правила «Custom»
Выбираем тип «All Programs»
Выбираем тип протокола «TCP» и указываем локальный порт «2222»
Указываем IP-адреса, которые будут заблокированы к SSH-сервису
Запрещаем подключение к выбранному порту «Block the connection
Называем правило «BlockCLI-SSH» и нажимаем кнопку «Finish» для завершения создания правила
Доброго. А попроще, что с этим сервером делать — он у меня в автозагрузке маячит.