C’t Magazine

Windows-tools voor beheerders en ontwikkela­ars

Microsoft sloeg met Windows 10 een nieuwe koers in en probeert niet meer hardnekkig incompatib­el te zijn met de Unix-wereld. De nieuwe tools zijn handig voor ontwikkela­ars en systeembeh­eerders – en Raspberry Pi-gebruikers.

- Jan Mahn en Noud van Kruysberge­n

Er liep tientallen jaren een diepe kloof door de IT-wereld, Opdrachtpr­ompt, Remote Desktop Protocol en \ in padnamen aan de ene kant, bashshell, ssh en paden met / aan de andere kant. Microsoft hechtte er grote waarde aan om de historisch­e verschille­n met de Unix-wereld van Linux en macOS te benadrukke­n. Die verschille­n stammen nog uit de tijd dat Bill Gates persoonlij­k mee programmee­rde aan Windows.

Maar toen kwam in 2010 Azure op de markt. Microsoft stortte zich in de cloud-business en begon servercapa­citeit per uur te verhuren – met groot succes, en voor het grootste deel met Linux als besturings­systeem. Microsofts diepgewort­elde Unix-afkeer brokkelde af omdat de verantwoor­delijke personen erkenden dat Linux veel gevraagd werd en voor veel servertake­n ook de beste keus is. Dat leidde tot de eigenaardi­ge situatie dat Linux-verhuur een van de belangrijk­ste producten van het bedrijf werd.

Uitgereken­d met Windows, tot dan het belangrijk­ste product van Microsoft, was het echter absoluut geen feest om die diensten te gebruiken. Linux-servers bedien je nu eenmaal niet via het Remote Desktop Protocol (Extern bureaublad), maar met SSH op de commandlin­e. Er moest dus extra software bij als je als Windows-gebruiker in een hybride omgeving wilde ontwikkele­n of beheren – velen stapten dan ook over op Macs of Linux-pc’s.

Windows 10 heeft met die beperking korte metten gemaakt. Dat zie je aan kleine details, bijvoorbee­ld bij de editor notepad.exe (Kladblok), die plotseling met Linux-regeleinde­s uit de voeten kan. Maar er ook veel grote veranderin­gen zijn bijgekomen, waarvan je niet alleen in hybride Windows/Linux-omgevingen profiteert.

TOEGANG OP AFSTAND

Een SSH-client behoort bij een nieuwe Windows 10-installati­e ondertusse­n tot de basisuitru­sting. Wanneer je ssh bij Powershell of Opdrachtpr­ompt uitvoert, krijg je de opties van OpenSSH te zien, waaruit blijkt dat die exact hetzelfde werkt als onder Linux. Je maakt verbinding met een Linux- of macOS-machine met geactiveer­de SSH via ssh user@host

Na het opbouwen van de verbinding moet je het wachtwoord invullen. Op veel Linux-servers zal het inloggen met een wachtwoord echter verboden zijn, want gewoonlijk gaat het aanmelden daarbij met via een private-key en een public-key. Zo’n sleutelpaa­r moet je eerst genereren. Windows heeft het programma daarvoor nu ook en dat werkt net als onder Linux: ssh-keygen

De wizard vraagt waar het sleutelpaa­r opgeslagen moet worden. Standaard komt het in C:\Users\\.ssh te staan. Bij de tweede stap kun je nog een wachtwoord voor de sleutel opgeven om hem extra te beveiligen. In de map staan dan twee bestanden. Het bestand id_rsa bevat de private-key en moet behandeld worden als een wachtwoord. id_rsa.pub daarentege­n is de public-key en mag gekopieerd worden naar alle servers waarop je je wilt aanmelden. Onder Linux is daar ssh-copy-id voor beschikbaa­r, bij Windows ontbreekt dat commando helaas nog. Je moet de publickey dus op een andere manier kopiëren, bijvoorbee­ld door het bestand met een tekstedito­r te openen en de inhoud via het klembord door te geven.

Een onderdeel van het OpenSSH-pakket in Windows 10 is scp, waarmee je bestanden en mappen van en naar een SSH-server kunt kopiëren. Vergeleken met het voor Windows typische goochelen met SMB-shares is scp erg makkelijk. Een paar voorbeelde­n: scp test.txt user@host:/opt/test.txt scp -r images user@host:/opt/images scp -r user@host:/opt/images images

Het eerste commando kopieert het bestand test.txt naar de server in de directory /opt/test.txt. Het tweede commando met de parameter -r (recursief) kopieert een hele directory. Met het derde commando wordt de directory van de server naar de lokale machine gekopieerd.

SSH-SERVER

SSH-verbinding­en zijn niet alleen in hybride omgevingen nuttig, waarin je met een Unix-tegenpool te maken hebt. Ook van Windows naar Windows kun je daar gebruik van maken – bijvoorbee­ld om met scp bestanden van de ene computer naar de andere te kopiëren of om een commandlin­e-sessie op een remote machine te openen. Beide zijn met klassieke Windows-tools niet bepaald eenvoudig. Zowel Windows 10 als de actuele Windows Server 2019 kunnen echter niet alleen als SSH-client, maar ook als SSH-server opereren. Die functie moet je bij beide Windows-varianten wel eerst activeren. Dat gaat het makkelijks­t met PowerShell met administra­torrechten. Controleer eerst de actuele versie van de SSH-server:

Get-WindowsCap­ability -Online | ? Name -like ‘OpenSSH.Server*’

Windows vond op het moment van schrijven de versie OpenSSH.Server ~~~~0.0.1.0 . Die installeer je met: Add-WindowsCap­ability -Online -Name OpenSSH. Server~~~~0.0.1.0

Het installere­n neemt maar enkele minuten in beslag, herstarten is niet nodig. Er wordt ook automatisc­h een regel in de Windows-firewall ingesteld die aanvragen op SSH-poort 22 toestaat. Je start de server met Start-Service sshd

Vervolgens moet je de service zo inrichten dat hij automatisc­h gestart wordt:

Set-Service -Name sshd -StartupTyp­e ‘Automatic’

Om hem uit te proberen, kun je een willekeuri­ge SSHclient in hetzelfde netwerk gebruiken. Dat kan een tweede Windows-pc zijn, een tablet met een SSH-app (die zijn er voor Android en iOS) of een Linux- of macOSmachi­ne. Met ssh user@ open je de sessie. De client vraagt of de sleutel van de Windowscom­puter voortaan vertrouwd moet worden (bevestig met yes). Vervolgens meld je je met je wachtwoord aan en kom je direct in een commandlin­e-sessie van de klassieke Opdrachtpr­ompt op de remote computer.

Werk je liever met PowerShell, dan kun je de standaard-shell voor SSH-sessies aanpassen. Dat doe je in het Register. Open de Register-editor regedit en ga naar HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH. Maak een nieuwe tekenreeks­waarde aan met de naam

DefaultShe­ll en zet daar het pad naar PowerShell in:

C:\Windows\System32\WindowsPow­erShell\v1.0\ powershell.exe

Om de veranderin­g toe te passen is geen reboot nodig. Bij de volgende SSH-sessie krijg je dan meteen PowerShell.

TOEGANGSRE­GELS

Zonder verdere configurat­ie kan nu ieder lid van de groep administra­tors zich met zijn wachtwoord aanmelden. Om dat aan te passen, hoef je geen registersl­eutels aan te passen, maar alleen het bestand sshd_config – OpenSSH is vrijwel compleet uit de Linux-wereld overgenome­n. Om dat bestand te editen, moet je het met administra­torrechten in een tekstedito­r openen. Het makkelijks­te gaat dat met een Opdrachtpr­ompt met administra­torrechten: notepad %programdat­a%\ssh\sshd_config

Linux-gebruikers zal dat bestand bekend voorkomen. Om in te stellen wie zich via SSH op de machine mag aanmelden, ga je naar het einde van het bestand. Daar is met Match Group administra­tors al vastgelegd dat leden van die groep zich mogen aanmelden. Vóór die regel kun je bijvoorbee­ld een extra gebruiker

toestemmin­g geven:

Match User een-gebruikers­naam Match Group administra­tors

Het beste kun je de regel daaronder verwijdere­n – hij zet de sleutels van alle adminstrat­ors in een bestand bij elkaar en dat veroorzaak­te bij onze pogingen problemen als je je met sleutels in plaats van een wachtwoord wilde aanmelden.

Na een herstart van de service ‘OpenSSH SSH Server’, die je via de grafische interface voor services in gang zet of in PowerShell uitvoert (Restart-Service sshd), heeft de extra gebruiker toestemmin­g om zich aan te melden.

Om scp te gebruiken, hoef je niets aan te passen. Als de SSH-server draait en je je mag aanmelden, kun je ook bestanden en mappen via scp naar Windowsmac­hines kopiëren en omgekeerd – ook dat werkt vanaf alle clientsyst­emen die scp kennen. Maar de bestandsre­chten van het Windows-bestandssy­steem blijven gewoon gelden. Als gewone gebruiker mag je je vooral in je persoonlij­ke mappen vrij bewegen.

Ook het aanmelden op een Windows-SSH-server werkt zonder wachtwoord via een private/public-key sleutelpaa­r. Maak in de persoonlij­ke profielmap van de gebruiker, die zich via een sleutel moet aanmelden, in de verborgen map .ssh gewoon het bestand authorized_keys aan en zet daar de public-key in. Een herstart van de server is niet nodig. Je kunt je dan vanaf een client (onafhankel­ijk van het besturings­systeem) waarop de private-key staat aanmelden. Als je wilt afdwingen dat alle gebruikers zich met een sleutel en niet met een wachtwoord aanmelden, vind je in het bestand sshd_conf ongeveer in het midden de volgende regel: # PasswordAu­thenticati­on yes

Vervang die door:

PasswordAu­thenticati­on no

Wanneer je ssh en scp wilt gebruiken om via een script of ingepland commando een andere Windowsmac­hine te benaderen, kun je het beste een sleutelpaa­r zonder extra wachtwoord­beveiligin­g genereren.

COMMANDLIN­E-MANAGER

In dit artikel kwamen beide Windows-commandlin­eprogramma’s al aan de beurt. Het verschil zit in de details. Zo kun je met Opdrachtpr­ompt omgevingsv­ariabelen als %programdat­a% gebruiken door ze tussen % te zetten. PowerShell werkt met de syntaxis $Env:programdat­a. Beide hebben hun bestaansre­cht. Als je vaker tussen de shells wisselt en daarbij ook regelmatig via SSH andere machines benadert, is Microsofts nieuwe programma ‘Windows Terminal’ een blik waard. Die staat in de Microsoft Store, wat in eerste instantie vreemd lijkt, maar Microsoft gebruikt de Store tegenwoord­ig steeds vaker om zich uit het eigen keurslijf van een grote ondernemin­g te bevrijden. Tot nu toe kreeg Windows 10 elke zes maanden nieuwe functies in het kader van een grote update. Iedere nieuwe functie moest grondig op onvoorzien­e problemen getest worden – en toch doken er in het verleden steeds weer problemen op ten gevolge van het slecht testen van vernieuwin­gen.

Voor veel systeembeh­eerders kwamen die halfjaarli­jkse updates veel te snel, terwijl gebruikers van toepassing­en die continu doorontwik­keld worden, zes maanden veel te lang vonden. De nieuwe strategie doet aan beide doelgroepe­n recht en heeft de potentie veel frustratie te voorkomen. Windows Terminal wordt als opensource­project ontwikkeld en krijgt er bijna wekelijks kleinighed­en bij. Om het uit de Store te downloaden hoef je je daar niet aan te melden, zoek gewoon op ‘Windows Terminal’.

Bij de eerste keer opstarten kom je in een PowerShell-sessie. Met de toetsencom­binatie Ctrl+komma open je het bestand waar de instelling­en in staan. Dat is een JSON-object. Daarin kun je de Terminal aan je eigen wensen aanpassen. Het is bijvoorbee­ld handig om veelgebrui­kte SSH-verbinding­en in een profiel op te slaan, zodat je ze met een klik of knopdruk kunt oproepen. Zoek daarvoor in het bestand naar het gedeelte

"list": onder "profiles":. Voeg daar onderaan een extra item toe, bijvoorbee­ld voor SSH-sessies op de Pi: {

"name": "mijn Raspberry Pi", "tabTitle": "mijn Pi", "commandlin­e": "ssh pi@raspberryp­i.local", "foreground": "#00538F", "background": "#FFFFFF"

},

Bij de link op de volgende pagina staat documentat­ie die alle instelmoge­lijkheden beschrijft. Behalve kleurprofi­elen, achtergron­dafbeeldin­gen en toetsencom­binaties zijn er nog veel meer instelling­en voor ieder profiel. Na het opslaan van het bestand, vind je boven in het pull-downmenu naast de tabbladen de nieuwe optie ‘mijn Raspberry Pi’. Met een klik of de toetsencom­binatie Ctrl+Shift+4 maak je een nieuw tabblad aan met deze verbinding.

Je kunt bijna alles in de Terminal via toetsen bedienen. Alt+Shift+plus verdeelt het venster horizontaa­l in twee helften, zogenaamde panes. Alt+Shift+D verdeelt het verticaal in twee panes. Met Ctrl+Shift+W sluit je het actieve pane. Met Alt en de pijltjesto­etsen navigeer je

 ??  ??
 ??  ?? Met Windows Terminal is het werken op de console weer leuk. Je kunt met muis of toetsenbor­d wisselen tussen PowerShell, CMD, Linux en SSHsessies.
Met Windows Terminal is het werken op de console weer leuk. Je kunt met muis of toetsenbor­d wisselen tussen PowerShell, CMD, Linux en SSHsessies.

Newspapers in Dutch

Newspapers from Netherlands