В Windows Server 2022 OpenSSH Server есть как дополнительный компонент: без сторонних установщиков, с обновлениями через Windows Update. После установки можно выполнять PowerShell по SSH, копировать файлы через scp и подключать к серверу скрипты или CI, как к любой машине на Linux.
Всё ниже мы сделали на нашем образе Windows Server 2022 в PowerShell с правами администратора по RDP (как подключиться).
Сначала о сети. На Windows-тарифе с NAT единственный входящий проброс ведёт на RDP, поэтому SSH из интернета недоступен. Для SSH снаружи нужен тариф с собственным IPv4, например Windows Small-IP. Если порт доступен, шаги ниже занимают около пяти минут.
1. Установите OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Клиент уже установлен, сервер показывает NotPresent, пока вы его не добавите. На нашем сервере установка заняла 28 секунд.
2. Запустите службу и включите автозапуск
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
При установке компонента создаётся правило брандмауэра OpenSSH-Server-In-TCP (порт 22, входящие, разрешено), так что добавлять своё не нужно.
3. Сделайте PowerShell оболочкой по умолчанию
По умолчанию сеанс SSH открывается в cmd.exe. Переключите на PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Новые подключения сразу получают PowerShell 5.1, перезапуск не нужен.
4. Ключ для Administrator: файл, на котором спотыкаются все
Это первая ловушка Windows. Для учётных записей из группы Administrators sshd не читает C:\Users\<name>\.ssh\authorized_keys. Он читает один общий файл C:\ProgramData\ssh\administrators_authorized_keys, и только если писать в него могут лишь Administrators и SYSTEM:
$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
-Encoding ascii тоже важен. В нашей проверке тот же ключ, сохранённый через Out-File (UTF-16, кодировка PowerShell 5.1 по умолчанию), отклонялся с Permission denied (publickey). Со своей машины:
ssh Administrator@YOUR.SERVER.IP
Вы должны получить приглашение PowerShell без пароля. Для пользователей без прав администратора работает обычный C:\Users\<name>\.ssh\authorized_keys.
5. Выключите вход по паролю: вторая ловушка
Очевидной правки PasswordAuthentication no в этой версии недостаточно. OpenSSH 8.1 продолжает предлагать keyboard-interactive, который спрашивает тот же пароль Windows. В нашей проверке вход без ключа продолжал показывать keyboard-interactive, пока мы не выключили и его. Кроме того, настройка должна стоять до блока Match Group administrators в конце файла, иначе она действует только на администраторов. Эта команда ставит обе строки в начало:
$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd
Не закрывайте текущий сеанс SSH и проверьте из второго терминала. Попытка войти только по паролю теперь должна получить:
Permission denied (publickey).
Так было в нашей проверке и для Administrator, и для обычного пользователя, а вход по ключу продолжал работать.
Что с этим можно делать
- Выполнять команду откуда угодно:
ssh Administrator@IP 'Get-Service sshd'. - Копировать файлы:
scp .\app.zip Administrator@IP:C:/apps/. - Ограничить порт своим адресом так же, как для RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Какой тариф
Для SSH снаружи нужен публичный IPv4: Windows Small-IP (4 vCPU, 4 ГБ, 50 ГБ) стоит $28/мес, Windows Medium-IP (6 vCPU, 6 ГБ) — $36/мес. Windows — это Server 2022 с вашей лицензией (что такое BYOL). Все четыре тарифа — на странице Windows VPS. Чтобы программа работала после отключения, см. скрипт 24/7 на Windows Server.
Комментарии
Пока нет комментариев. Будьте первым.