У 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.
Коментарі
Поки немає коментарів. Будьте першим.