De Secure Shell (SSH)-protocol en het OpenSSH-project zijn al tientallen jaren aanwezig op Linux. Maar OpenSSH op Windows is pas recentelijk omarmd in de wereld van Windows. Als zodanig wordt een Windows Server doorgaans niet vooraf gebouwd en klaar voor gebruik geleverd en vereist enige configuratie.
In deze handleiding leer je hoe je net zo eenvoudig kunt SSH’en naar je Windows Server als naar Linux. Je leert hoe je OpenSSH installeert (of bijwerkt) op Windows, de juiste firewallregels toevoegt, en configuraties voor openbare sleutels, wachtwoorden en op certificaten gebaseerde authenticatie instelt.
Vereisten
Om de voorbeelden en demonstraties in dit artikel effectief te volgen, moet je aan de onderstaande eisen voldoen.
- A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
- A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.
OpenSSH downloaden
In tegenstelling tot Linux-servers draait er geen SSH-server standaard op Windows-servers. Maar Microsoft heeft een open-source poort van OpenSSH voor Windows uitgebracht. Met deze release kun je nu een SSH-server op een Windows-machine instellen.
Om te beginnen, moet je eerst OpenSSH downloaden. Volg hiervoor de onderstaande stappen:
- Verbind met het bureaublad op een Windows Server via Remote Desktop (RDP) of je voorkeursdesktopbeheerclient.
2. Op je Windows Server-bureaublad, open een verhoogde Windows PowerShell console.
3. Kopieer vervolgens de onderstaande code, plak het in het PowerShell-venster en druk op Enter. Dit script zal de nieuwste OpenSSH-release downloaden, die op dit moment v8.1.0.0p1-Beta is, naar de huidige werkmap.
Als je de PowerShell-code om OpenSSH te downloaden wilt opslaan, kun je ook een code-editor zoals Windows PowerShell ISE of Visual Studio Code openen en het daar opslaan.
4. Het bestand OpenSSH-Win64.zip zou nu in je huidige werkmap moeten staan. Verifieer dit door de onderstaande opdracht uit te voeren.
Zoals je hieronder kunt zien, staat het bestand OpenSSH-Win64.zip in de map.

OpenSSH installeren
Nadat je OpenSSH-Win64.zip hebt gedownload, is de volgende stap om OpenSSH op de server te installeren. Er is geen installatiewizard, voor het geval je dat verwacht.
- While still in dezelfde PowerShell-sessie, kopieer de onderstaande code en voer deze uit in PowerShell. Deze code pakt de inhoud van het bestand OpenSSH-Win64.zip uit naar C:\Program Files\OpenSSH.
2. Na het uitpakken van het ZIP-bestand, voer de onderstaande opdracht uit in PowerShell om het script C:\Program Files\OpenSSH\install-sshd.ps1 uit te voeren. Dit script installeert de OpenSSH SSH Server-service (sshd) en de OpenSSH Authentication Agent-service (sshd-agent).
Je kunt het verwachte resultaat hieronder zien.

Om ervoor te zorgen dat de SSH-server automatisch start, voer de onderstaande opdracht uit in PowerShell.
Het toevoegen van een Windows Firewall-regel om SSH-verkeer toe te staan
Deze procedure is alleen van toepassing als jouw Windows Server de Windows Firewall gebruikt. Voor servers met firewalls van derden, raadpleeg de documentatie van jouw firewall over hoe je poort 22 kunt toestaan.
Het installeren van OpenSSH creëert niet automatisch een firewall-uitzonderingsregel om SSH-verkeer toe te staan. Daarom is uw volgende taak om de firewall-regel handmatig te maken.
Een van de eenvoudigste manieren om een nieuwe Windows Firewall-regel te maken, is met PowerShell en de New-NetFirewallRule
-cmdlet. Het onderstaande commando maakt een firewall-regel genaamd Allow SSH die al het inkomende TCP-verkeer naar poort 22 toestaat.
Kopieer het onderstaande commando en voer het uit in PowerShell.
De onderstaande schermafbeelding toont de verwachte output in PowerShell na het maken van de firewall-regel.

Verbinden met SSH met wachtwoordauthenticatie
Op dit punt hebt u OpenSSH geïnstalleerd op Windows en de initiële serverconfiguratie uitgevoerd. De volgende stap is om te testen of het daadwerkelijk lukt om via SSH verbinding te maken.
Om uw nieuw geconfigureerde SSH-server te testen, voeren we nu het ssh
-commando uit op uw lokale computer.
Dezelfde stappen in deze sectie zijn ook van toepassing bij het verbinden met een Linux SSH-server.
1. Open PowerShell op uw lokale computer.
2. Voer vervolgens het onderstaande commando uit om het SSH-inlogproces te starten. Zorg ervoor dat u de gebruikersnaam en de externe host van uw Windows Server wijzigt.
3. Aangezien u voor de eerste keer verbinding maakt met de server, ziet u een prompt waarin staat dat de authenticiteit van de host niet kan worden vastgesteld. Dit bericht betekent dat uw computer de externe host nog niet herkent. Typ ja en druk op Enter om door te gaan.
4. Wanneer u om het wachtwoord wordt gevraagd, typt u uw accountwachtwoord in en drukt u op Enter.

5. Na het inloggen, zoals u kunt zien in de onderstaande schermafbeelding, komt u bij de opdrachtprompt van de externe host terecht. Stel dat u wilt bevestigen dat u de sessie op de externe host hebt geopend. Typ hiervoor hostname
en druk op Enter. Het commando moet de naam van de externe computer retourneren.

Het standaard shell wijzigen voor OpenSSH naar PowerShell
Toen u voor het eerst inlogde op uw Windows SSH-server, zult u merken dat de standaard shell of commando-interpreter CMD is. CMD als standaard SSH-shell hebben is prima, maar als u liever PowerShell als standaard shell gebruikt, volgt u deze stappen.
Om de standaard OpenSSH-shell van CMD naar PowerShell te wijzigen:
Ten eerste opent u een verhoogd PowerShell-venster op uw Windows Server, als u er niet al een open hebt.
Vervolgens maakt u een nieuwe registersnaamwaarde genaamd DefaultShell in de registerkey HKLM:\SOFTWARE\OpenSSH. Stel de gegevens van de registersnaamwaarde DefaultShell in op het pad van Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
De onderstaande schermafbeelding toont het verwachte resultaat van het commando.

Configuratie van openbare sleutelauthenticatie
In de vorige secties heb je verbinding gemaakt met een gebruikersnaam en wachtwoord. Dit werkt, maar een veiligere manier om je te authenticeren bij een SSH-server is door gebruik te maken van een sleutelpaar.
Kort gezegd bestaat een sleutelpaar uit twee sleutels, de openbare sleutel en privésleutel, die samen een reeks beveiligingsreferenties vormen om je identiteit te bewijzen.
De openbare sleutel wordt opgeslagen op de server, terwijl de privésleutel op de lokale computer blijft. Je moet een privésleutel behandelen als je wachtwoord. Als de privésleutel in verkeerde handen valt, kan iemand deze gebruiken om toegang te krijgen tot je SSH-server.
Voorbereiden van het administrators_authorized_keys-bestand
Public keys moeten op de server staan. Maar waar? Voor OpenSSH op Windows leest de SSH-server de openbare sleutels uit het bestand C:\ProgramData\ssh\administrators_authorized_keys. Maar dit bestand bestaat niet standaard. Je moet er eerst een maken.
Volg deze stappen hieronder om het bestand administrators_authorized_keys te maken en de juiste toegangscontrolelijst (ACL) in te stellen.
Op de Windows Server:
1. Open een verhoogde Windows PowerShell-console indien nog niet geopend.
2. Kopieer de onderstaande opdracht en voer deze uit in PowerShell. Deze opdracht maakt het bestand administrators_authorized_keys met behulp van de New-Item
cmdlet.
Je zou een resultaat moeten zien dat vergelijkbaar is met de onderstaande schermafbeelding.

3. Haal vervolgens de ACL op die momenteel is toegewezen aan het bestand ssh_host_dsa_key en kopieer die ACL naar het bestand administrators_authorized_keys. Voer hiervoor de onderstaande opdracht uit.
De OpenSSH-service vereist dat alleen de Administrators-groep en het SYSTEM-account toegang hebben tot het bestand administrators_authorized_keys. En het kopiëren van de ACL van ssh_host_dsa_key naar administrators_authorized_keys is logisch omdat de ACL al is ingesteld.
4. Open nu Windows Verkenner.
5. Navigeer naar de map C:\ProgramData\ssh\.
6. Klik met de rechtermuisknop op het bestand administrators_authorized_keys en klik op Eigenschappen.
7. Op het eigenschappenvenster, klik op het Beveiliging tabblad en klik op Geavanceerd.

8. Bevestig vervolgens of de machtigingen worden weergegeven zoals in de onderstaande afbeelding.

Het genereren van een nieuw SSH-sleutelpaar
Om een nieuw SSH-sleutelpaar te genereren, gebruikt u het ssh-keygen
-commando, dat deel uitmaakt van de OpenSSH-clienttools ingebouwd in Windows 10 (en hoger) en de meeste Linux-besturingssystemen.
Het voorbeeld dat in dit gedeelte wordt getoond, werkt op zowel Windows- als Linux-computers.
Op uw lokale computer, in een PowerShell-console:
1. Navigeer naar de map .ssh van uw thuismap door het onderstaande commando uit te voeren.
2. Typ vervolgens de opdracht ssh-keygen
in en druk op Enter. Wanneer gevraagd wordt om een bestandslocatie op te geven om de gegenereerde sleutel op te slaan, houd de standaardlocatie aan en druk op Enter. Hierdoor kan je SSH-client je SSH-sleutels automatisch vinden bij het authenticeren.
Op Windows is het standaard sleutelbestand C:\Users\<gebruikersnaam>\.ssh\id_rsa.
3. Laat het wachtwoord leeg wanneer daarom wordt gevraagd. Op dit punt hoef je geen wachtwoord te gebruiken voor testdoeleinden.
Het toevoegen van een wachtwoord aan je privésleutel verhoogt aanzienlijk de beveiliging. Een wachtwoord fungeert als tweede-factor authenticatie (2FA) voor je privésleutel.
Je zult merken dat de opdracht twee bestanden heeft aangemaakt; id_rsa (privésleutel) en id_rsa.pub (openbare sleutel).

Het implementeren van de openbare sleutel naar de Windows SSH-server
Nu je je privé-publieke sleutelpaar hebt gegenereerd, is je volgende stap het kopiëren van de openbare sleutel naar het bestand C:\ProgramData\ssh\administrators_authorized_keys op de SSH-server.
Op je lokale computer, in een PowerShell-console:
1. Kopieer de onderstaande code en voer deze uit in PowerShell. Zorg ervoor dat je eerst de gebruikersnaam en het IP-adres wijzigt. Je kunt verwijzen naar de opmerking boven elke opdracht om te weten wat elke opdracht doet.
2. Voer uw wachtwoord in wanneer daarom wordt gevraagd, en ssh zal doorgaan met het kopiëren van de openbare sleutel. U ziet een vergelijkbaar resultaat, zoals hieronder getoond.

Verbinding maken met SSH met behulp van openbare sleutelverificatie
Nu u uw openbare sleutel naar uw SSH-server hebt gekopieerd, hoeft u geen wachtwoord meer te gebruiken voor verificatie. Zoals u hieronder kunt zien, vroeg ssh niet om een wachtwoord.

Configuratie van certificaatverificatie
Net als bij openbare sleutelverificatie is certificaatverificatie zonder wachtwoord of met een wachtwoordbeveiliging. Om certificaatlogin in te schakelen, volgt u dezelfde procedure als bij het genereren van een sleutelpaar zonder de openbare sleutel naar de SSH-server te implementeren.
U hoeft de openbare sleutel niet te koppelen aan de authorized_keys- of administrators_authorized_keys-bestanden op de SSH-server. In plaats daarvan wordt de openbare sleutel ondertekend met een certificaatautoriteit (CA)-sleutel.
Aanmaken van de certificaatautoriteit (CA)-sleutel
Het genereren van de CA-sleutels voor ondertekening is vergelijkbaar met het genereren van een gebruikerssleutelpaar dat u eerder in dit artikel hebt gedaan. Alleen deze keer moet u een bestandsnaam opgeven voor de nieuwe CA-sleutels. Doe dit op uw Windows Server in een PowerShell-console:
Voer het ssh-keygen
commando uit zoals hieronder weergegeven. Dit commando maakt de CA-sleutel aan in C:\ProgramData\ssh\ca_userkeys, maar voel je vrij om een andere bestandsnaam te gebruiken. Het gebruik van een andere bestandsnaam heeft geen invloed op de functionaliteit van de CA-sleutel.
Als om een wachtwoord wordt gevraagd, laat het wachtwoord dan leeg en druk op Enter.
Je kunt hieronder zien dat het commando twee bestanden heeft aangemaakt. ca_userkeys, dat is de privésleutel, en ca_userkeys.pub, dat is de openbare sleutel.

Nu je de CA-sleutels hebt gegenereerd, vertel je de SSH-server om de CA te vertrouwen en waar de CA-sleutel te vinden is. Voeg hiervoor een nieuwe regel toe TrustedUserCAKeys pad/naar/ca_userkeys.pub
aan het bestand C:\ProgramData\ssh\sshd_config op de server.
Voer de onderstaande commando’s uit om het configuratie-item toe te voegen in het bestand sshd_config.
De Openbare Sleutel van de Gebruiker Ondertekenen
Op dit punt heb je de CA-sleutels gegenereerd en de SSH-server geconfigureerd om de CA openbare sleutel te vertrouwen. Wat nu nog rest is om je gebruikersopenbare sleutel te ondertekenen.
Op je lokale computer, in een PowerShell-console:
1. Kopieer het id_rsa.pub
bestand naar je homedrive op de SSH-server met behulp van het SCP commando. Zorg ervoor dat je de gebruikersnaam en het IP-adres wijzigt naar de juiste waarden.
2. Log in op je Windows Server via ssh. Eenmaal ingelogd, voer ssh-keygen
uit om de openbare sleutel van de gebruiker te ondertekenen. Je zult merken dat de onderstaande opdracht verschillende parameters gebruikt. Laten we ze uitsplitsen.
-s C:\ProgramData\ssh\ca_userkeys
– specificeer de locatie van de CA-sleutel voor het ondertekenen van de openbare sleutel. In dit voorbeeld is de CA-sleutel degene die je hebt gegenereerd.-I id_gebruikersnaam
– specificeer de ID die je aan de ondertekende openbare sleutel wilt toewijzen. Verander de waarde vanid_gebruikersnaam
naar elke gewenste naam.-V +4w
– deze parameter specificeert de geldigheidsduur van de ondertekende sleutel. In dit voorbeeld betekent+4w
dat de ondertekende gebruikerssleutel vier weken geldig zal zijn. Je kunt deze waarde wijzigen naar de door jou gewenste geldigheidsduur.-n gebruikersnaam
– dit is de gebruikersnaam van degene die eigenaar wordt van de ondertekende openbare sleutel.<pad naar id_rsa.pub>
– dit is de locatie van de openbare sleutel van de gebruiker om te ondertekenen (Windows).
Na het uitvoeren van de opdracht in je SSH-sessie, zou je een vergelijkbare uitvoer moeten krijgen, zoals hieronder getoond. Zoals je kunt zien, heeft de opdracht een nieuw bestand gegenereerd met de naam id_rsa-cert.pub, wat het ondertekende gebruikerscertificaat is.

3. Navigeer nu terug naar je lokale computer PowerShell-sessie en kopieer het bestand id_rsa-cert.pub van de server naar je lokale computer. Verander eerst de gebruikersnaam en het IP-adres naar de juiste waarden voordat je de opdracht uitvoert.
Nadat de kopie is voltooid, vind je het ondertekende gebruikerscertificaat in je thuismap, zoals hieronder getoond.

Verbinding maken met SSH met certificaatauthenticatie
Je hebt certificaatauthenticatie geconfigureerd en nu heb je je gebruikerscertificaat. Je moet nu testen of je kunt verbinden met de SSH-server met certificaatauthenticatie.
De opdracht om verbinding te maken met SSH met een certificaat is hetzelfde als bij het gebruik van een wachtwoord of een openbare sleutel. Maar als je eerder openbare sleutelauthenticatie hebt ingeschakeld, schakel deze dan eerst uit. Anders zal SSH blijven uw sleutelpaar gebruiken in plaats van uw certificaat.
Om uw sleutelpaar uit te schakelen, verwijdert u uw openbare sleutel uit het administrators_authorized_keys-bestand. Volg hiervoor deze stappen.
Merk op dat de volgende opdrachten het hele administrators_authorized_keys-bestand zullen leegmaken, waardoor alle gekoppelde openbare sleutels effectief worden verwijderd. Als u niet alle gekoppelde openbare sleutels wilt wissen, gebruikt u een teksteditor om geselecteerde openbare sleutels handmatig uit elk bestand te verwijderen.
Terwijl je bent ingelogd op de Windows Server via SSH:
1. Voer de onderstaande code uit in PowerShell om het administrators_authorized_keys-bestand leeg te maken.
2. Op dit moment zijn de authorized_keys- en administrators_authorized_keys-bestanden leeg, zoals je kunt zien in de onderstaande schermafbeelding.

3. Typ exit
en druk op Enter om de verbinding met je SSH-sessie te verbreken. Je keert terug naar je PowerShell-sessie.
4. Na het verwijderen van de openbare sleutels zal je volgende SSH-aanmeldingspoging certificaatauthenticatie gebruiken. De aanmeldervaring zal hetzelfde zijn als bij openbare sleutelauthenticatie.

Conclusie
Je hebt nu een OpenSSH Windows Server vanaf nul opgezet en alle stappen doorlopen tot het verkennen en instellen van verschillende authenticatiemethoden. Je kunt nu verbinding maken met je Windows Servers precies zoals je dat zou doen met Linux!