Werken met OpenSSH
Jul 21 2023
Waar beginnen we?
Bij het begin uiteraard! OpenSSH is een fantastische software om op een veilige manier te verbinden met servers. Deze software is vaak beschikbaar op client met Linux, MacOS en zelfs Windows!
Iedereen die nog Putty gebruikt, let goed op!
Onder Services.msc
kan je de service OpenSSH openen en aanpassen naar Automatisch
. Standaard staat deze service uit waardoor het lijkt alsof OpenSSH niet standaard in Windows zit. Als die op automatisch staat, kan je het toestel herstarten en start OpenSSH vanzelf op maar het is logischer om hier gewoon even op Start
te drukken.
De configuratie
OpenSSH gaat altijd configuratie volgen in ~/.ssh/config
. Dat werkt grotendeels hetzelfde voor Linux, MacOS en Windows. Voordat we hier servers in gaan definiëren, kunnen we even stilstaan met naar welke toestellen we gaan verbinden. SSH maakt namelijk ook nog steeds gebruik van DNS. We kunnen dus bijvoorbeeld naar zn1.winderickx.me verbinden door simpelweg ssh zn1
uit te voeren. Hiervoor moet je wel met een lokale DNS kunnen praten die de vertaling voor jou kan maken. Dat spaart ook weer lijnen uit in onze configuratie. Ofwel kan je in Linux en MacOS een entry aanmaken in /etc/hosts
. Dit overruled DNS-servers die jouw toestel kent. Ga hier dus voorzichtig mee om!
In Windows vindt je een
/etc/hosts
achtig bestand onderC:\Windows\System32\drivers\etc
.
De basis
Het is heel simpel om configuratie op te bouwen. Onderstaand voorbeeld verbindt zo naar een server met een bepaalde gebruiker. Het aanmelden specifiek gebeurt met een SSH-key die we hier meegeven.
De private key wordt dankzij ForwardAgent
ook doorgegeven aan de server. Als je dan naar een nieuwe server verbindt, zal je gebruik kunnen maken van jouw private key zonder dat die op de server komt te staan.
De AddKeysToAgent
zorgt er verder voor dat je de key niet apart moet toevoegen met ssh-add
en gaat de key voor een standaard termijn in de agent houden.
Een laatste handige tip is RemoteForward
. Hiermee kan je bijvoorbeeld ook jouw GPG-key doorsluizen over jouw SSH verbinding. Je gaat dan eerst de remote socket
meegeven en vervolgens de local socket
. Voor GPG vind je die configuratie met: gpgconf --list-dirs agent-socket
Host zn1
Hostname zn1.winderickx.me
User ew
AddKeysToAgent yes
ForwardAgent yes
IdentityFile ~/.ssh/id_personal
RemoteForward /run/user/1001/gnupg/S.gpg-agent /run/user/1001/gnupg/S.gpg-agent
Nu wordt het interessant!
Het is een heel werk als je meer dan 100 servers moet beheren. Je gaat die niet één voor één willen toevoegen aan je SSH configuratie. De meeste van die servers gaan wel een aantal configuratie hebben die overeen zal komen met andere servers. Probeer daar de grootste gemene deler te vinden en maar daar een aparte entry van. Nu gaan we een wildcard gebruiken om een aantal zaken automatisch te laten invullen voor ons. Met onderstaande configuratie kan ik zowel naar zn1.winderickx.me verbinden alsook naar R4nd0ms3rvrr.amazon.com.
Host *
User ew
AddKeysToAgent yes
ForwardAgent yes
IdentityFile ~/.ssh/id_personal
Dat werkt goed tot je in meerder omgevingen komt en dus meerdere soorten servers moet verbinden. Het kan zijn dat je per omgeving een andere gebruiker hebt of een andere SSH-key. Zoek opnieuw naar de grootste gemene deler! Hieronder gebruiken we ook de ProxyJump
configuratie. We gebruiken srv-jump
als stepping stone voor servers beginnend met srv-
.
Host *
AddKeysToAgent yes
ForwardAgent yes
Host jumpserver
Hostname srv-jmp-001
User JumpUser
IdentityFile ~/.ssh/id_jump
Host srv-*
User admin
IdentityFile ~/.ssh/id_admin
ProxyJump jumpserver
Host *.winderickx.me
User ew
IdentityFile ~/.ssh/id_personal
Expert tip!
Zoals met vele zaken kan je die wildcard in de configuratie heel ver gebruiken. Om het dan leesbaar te houden, kunnen we best ook met negaties werken. Zo komen de wildcards pas echt tot hun recht!
Host *
AddKeysToAgent yes
ForwardAgent yes
Host !srv-jmp srv*
User admin
IdentityFile ~/.ssh/id_admin
ProxyJump srv-jmp-001
Host srv-jmp-001
user JumpUser
Host *.winderickx.me
User ew
IdentityFile ~/.ssh/id_personal
Controleer zeker ook man ssh_config
voor nog meer SSH configuratie goodness!