−25%

på Windows vid årsbetalning, till 31/10. Till paketen

EQVPS
Kom igång

Så installerar du OpenSSH Server på Windows Server 2022 (nyckelinloggning, PowerShell som skal)

Installera den inbyggda OpenSSH Server på en Windows Server 2022-VPS, gör PowerShell till standardskal, logga in med nyckel som Administrator och stäng av lösenordsinloggning. Med de två Windows-fällorna som får nyckelinloggningen att misslyckas.

Windows Server 2022 har OpenSSH Server som en valfri funktion: ingen tredjepartsinstallerare, uppdateringar via Windows Update. När den är på kan du köra PowerShell över SSH, kopiera filer med scp och rikta skript eller CI mot servern som mot vilken Linux-dator som helst.

Allt nedan gjorde vi på vår Windows Server 2022-avbild i en PowerShell med administratörsrättigheter via RDP (så ansluter du).

Först nätverket. På en Windows-plan med NAT går den enda inkommande vidarebefordran till RDP, så SSH går inte att nå från internet. För SSH utifrån behöver du en plan med egen IPv4, till exempel Windows Small-IP. När porten går att nå tar stegen nedan ungefär fem minuter.

1. Installera OpenSSH Server

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

Klienten är redan installerad; servern visar NotPresent tills du lägger till den. På vår server tog installationen 28 sekunder.

2. Starta den och låt den starta vid uppstart

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

När funktionen installeras skapas brandväggsregeln OpenSSH-Server-In-TCP (port 22, inkommande, tillåten), så du behöver inte lägga till någon egen.

3. Gör PowerShell till standardskal

Som standard hamnar en SSH-session i cmd.exe. Byt till PowerShell:

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

Nya anslutningar får PowerShell 5.1 direkt; ingen omstart behövs.

4. Din nyckel för Administrator: filen som alla snubblar på

Det här är den första Windows-fällan. För konton i gruppen Administrators läser sshd inte C:\Users\<name>\.ssh\authorized_keys. Den läser en gemensam fil, C:\ProgramData\ssh\administrators_authorized_keys, och bara om ingen utom Administrators och SYSTEM kan skriva till 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"

Även -Encoding ascii spelar roll. I vårt test nekades samma nyckel, sparad med Out-File (UTF-16, standard i PowerShell 5.1), med Permission denied (publickey). Från din dator:

ssh Administrator@YOUR.SERVER.IP

Du bör få en PowerShell-prompt utan lösenord. För användare utan administratörsrätt fungerar den vanliga C:\Users\<name>\.ssh\authorized_keys.

5. Stäng av lösenordsinloggning: den andra fällan

Den självklara ändringen, PasswordAuthentication no, räcker inte i den här versionen. OpenSSH 8.1 erbjuder fortfarande keyboard-interactive, som frågar efter samma Windows-lösenord. I vårt test visade en inloggning utan nyckel fortfarande keyboard-interactive tills vi stängde av även det. Inställningen måste dessutom stå före blocket Match Group administrators i slutet av filen, annars gäller den bara administratörer. Detta lägger båda raderna ö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

Håll din nuvarande SSH-session öppen och testa från en andra terminal. Ett försök med bara lösenord ska nu få:

Permission denied (publickey).

Det blev resultatet i vårt test för både Administrator och en vanlig användare, medan nyckelinloggningen fortsatte att fungera.

Vad du kan göra med det

  • Köra ett kommando varifrån som helst: ssh Administrator@IP 'Get-Service sshd'.
  • Kopiera filer: scp .\app.zip Administrator@IP:C:/apps/.
  • Begränsa porten till din adress på samma sätt som för RDP: Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Vilken plan

SSH utifrån kräver en publik IPv4: Windows Small-IP (4 vCPU, 4 GB, 50 GB) kostar $28/mån, Windows Medium-IP (6 vCPU, 6 GB) $36/mån. Windows är Server 2022 med din egen licens (BYOL förklarat). Alla fyra planerna finns på Windows VPS-sidan. För att hålla ett program igång efter att du kopplat från, se kör ett skript dygnet runt på Windows Server.

FAQ

Varför SSH på Windows när det finns RDP?

Skript och verktyg pratar SSH. Med OpenSSH på servern kör du PowerShell-kommandon från en Linux-dator eller ett CI-jobb, kopierar filer med scp och låter automatisering sköta servern utan skrivbordssession.

Min nyckel fungerar för en vanlig användare men inte för Administrator. Varför?

För medlemmar i gruppen Administrators ignorerar OpenSSH i Windows ~/.ssh/authorized_keys och läser C:\ProgramData\ssh\administrators_authorized_keys. Den filen får bara vara skrivbar för Administrators och SYSTEM, annars hoppar sshd tyst över den.

Når jag SSH på en Windows-plan med NAT?

Inte utifrån. På en Windows-plan med NAT vidarebefordras den personliga externa porten till RDP (3389), och det är den enda inkommande vidarebefordran. För SSH från internet väljer du en Windows-plan med egen IPv4. Inne i servern fungerar OpenSSH ändå för lokala verktyg.

Vilken OpenSSH-version installerar Windows Server 2022?

OpenSSH 8.1p1 for Windows. Därför använder lösenordsinställningarna ChallengeResponseAuthentication och inte det nyare namnet KbdInteractiveAuthentication.

Kommentarer

Inga kommentarer än. Bli först.

Lämna en kommentar

Kommentarer modereras innan de visas.