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 GB, 50 GB) струва $28/месец, Windows Medium-IP (6 vCPU, 6 GB) – $36/месец. Windows е Server 2022 с вашия собствен лиценз (какво е BYOL). Четирите плана са на страницата Windows VPS. За да продължи една програма да работи след прекъсване на връзката, вижте скрипт 24/7 на Windows Server.
Коментари
Още няма коментари. Бъди първият.