−25%

på Windows ved årlig betaling, til 31/10. Se pakkerne

EQVPS
Kom i gang

Sådan installerer du OpenSSH Server på Windows Server 2022 (nøglelogin, PowerShell som shell)

Installer den indbyggede OpenSSH Server på en Windows Server 2022-VPS, gør PowerShell til standardshell, log ind med nøgle som Administrator og slå adgangskodelogin fra. Med de to Windows-fælder, der får nøglelogin til at fejle.

Windows Server 2022 leveres med OpenSSH Server som en valgfri funktion: ingen tredjepartsinstallationsprogram, opdateringer via Windows Update. Når den er slået til, kan du køre PowerShell over SSH, kopiere filer med scp og pege scripts eller CI mod serveren som mod enhver Linux-maskine.

Alt nedenfor gjorde vi på vores Windows Server 2022-image i en PowerShell med administratorrettigheder via RDP (sådan forbinder du).

Først netværket. På en Windows-plan med NAT går den eneste indgående viderestilling til RDP, så SSH kan ikke nås fra internettet. Til SSH udefra skal du have en plan med egen IPv4, for eksempel Windows Small-IP. Når porten kan nås, tager trinene nedenfor omkring fem minutter.

1. Installer OpenSSH Server

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Klienten er allerede installeret; serveren viser NotPresent, indtil du tilføjer den. På vores server tog installationen 28 sekunder.

2. Start den, og lad den starte ved opstart

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*

Når funktionen installeres, oprettes firewallreglen OpenSSH-Server-In-TCP (port 22, indgående, tilladt), så du behøver ikke tilføje en selv.

3. Gør PowerShell til standardshell

Som standard lander en SSH-session i cmd.exe. Skift til PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Nye forbindelser får PowerShell 5.1 med det samme; ingen genstart er nødvendig.

4. Din nøgle til Administrator: filen, som alle falder over

Dette er den første Windows-fælde. For konti i gruppen Administrators læser sshd ikke C:\Users\<name>\.ssh\authorized_keys. Den læser én fælles fil, C:\ProgramData\ssh\administrators_authorized_keys, og kun hvis ingen andre end Administrators og SYSTEM kan skrive til den:

$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"

Også -Encoding ascii betyder noget. I vores test blev den samme nøgle, gemt med Out-File (UTF-16, standard i PowerShell 5.1), afvist med Permission denied (publickey). Fra din egen maskine:

ssh Administrator@YOUR.SERVER.IP

Du bør få en PowerShell-prompt uden adgangskode. For brugere uden administratorrettigheder virker den sædvanlige C:\Users\<name>\.ssh\authorized_keys.

5. Slå adgangskodelogin fra: den anden fælde

Den oplagte ændring, PasswordAuthentication no, er ikke nok i denne version. OpenSSH 8.1 tilbyder stadig keyboard-interactive, som spørger om den samme Windows-adgangskode. I vores test viste et login uden nøgle stadig keyboard-interactive, indtil vi også slog det fra. Desuden skal indstillingen stå før blokken Match Group administrators sidst i filen, ellers gælder den kun administratorer. Dette sætter begge linjer øverst:

$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

Hold din nuværende SSH-session åben og test fra en anden terminal. Et forsøg kun med adgangskode skal nu få:

Permission denied (publickey).

Det var resultatet i vores test for både Administrator og en almindelig bruger, mens nøglelogin blev ved med at virke.

Hvad du kan bruge det til

  • Køre en kommando hvor som helst fra: ssh Administrator@IP 'Get-Service sshd'.
  • Kopiere filer: scp .\app.zip Administrator@IP:C:/apps/.
  • Begrænse porten til din adresse på samme måde som for RDP: Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Hvilken plan

SSH udefra kræver en offentlig IPv4: Windows Small-IP (4 vCPU, 4 GB, 50 GB) koster $28/md., Windows Medium-IP (6 vCPU, 6 GB) $36/md. Windows er Server 2022 med din egen licens (BYOL forklaret). Alle fire planer står på Windows VPS-siden. For at holde et program kørende, når du har afbrudt forbindelsen, se kør et script døgnet rundt på Windows Server.

FAQ

Hvorfor SSH på Windows, når der er RDP?

Scripts og værktøjer taler SSH. Med OpenSSH på serveren kører du PowerShell-kommandoer fra en Linux-maskine eller et CI-job, kopierer filer med scp og lader automatisering styre serveren uden en skrivebordssession.

Min nøgle virker for en almindelig bruger, men ikke for Administrator. Hvorfor?

For medlemmer af gruppen Administrators ignorerer OpenSSH i Windows ~/.ssh/authorized_keys og læser i stedet C:\ProgramData\ssh\administrators_authorized_keys. Den fil må kun være skrivbar for Administrators og SYSTEM, ellers springer sshd den lydløst over.

Kan jeg nå SSH på en Windows-plan med NAT?

Ikke udefra. På en Windows-plan med NAT viderestilles den personlige eksterne port til RDP (3389), og det er den eneste indgående viderestilling. Til SSH fra internettet vælger du en Windows-plan med egen IPv4. Inde på serveren virker OpenSSH stadig til lokale værktøjer.

Hvilken OpenSSH-version installerer Windows Server 2022?

OpenSSH 8.1p1 for Windows. Derfor bruger adgangskodeindstillingerne ChallengeResponseAuthentication og ikke det nyere navn KbdInteractiveAuthentication.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.