In de vorige post hebben we de basisprincipes van het gebruik van het ssh-commando en enkele nuttige opties besproken. Maar het is behoorlijk vervelend om elke keer weer ingewikkelde IP-adressen, gebruikersnamen en poortnummers in te voeren. In zo'n geval kan het gebruik van een SSH Config-bestand deze rompslomp in één keer oplossen. Het is als een favorietenlijst waarin je vaak gebruikte servertoegangsinformatie kunt opslaan en waarmee je eenvoudig kunt inloggen met een alias.

Illustratie van een ontwikkelaar die SSH-config gebruikt als favorieten


Wat is een SSH Config-bestand?

Een SSH Config-bestand is een configuratiebestand dat de werking van de SSH-client aangepast aan jouw voorkeuren. Door toegangsinformatie voor specifieke hosts (gebruikersnaam, poort, te gebruiken sleutelbestand, enz.) van tevoren in dit bestand op te slaan, kun je later inloggen met slechts een korte alias.

  • Plaats: Gewoonlijk bevindt het zich in de .ssh map van je gebruikershome-directory, onder de naam config.
    • Voorbeeld: ~/.ssh/config
  • Bestand aanmaken: Als het ~/.ssh/config-bestand niet bestaat, kun je het zelf aanmaken.

    bash touch ~/.ssh/config chmod 600 ~/.ssh/config # Beperk de lees- en schrijftoegang tot alleen de eigenaar


Regels voor het schrijven van config-bestanden

Het config-bestand is een eenvoudig tekstbestand en elke instelling voor een host begint met het Host-sleutelwoord, gevolgd door een blok met instellingen.

Basisstructuur

Host [alias]
    [optie1] [waarde1]
    [optie2] [waarde2]
    ...
  • Host [alias]: Dit geeft het begin van dit blok aan en definieert de alias die je wilt gebruiken. Deze alias wordt gebruikt in het SSH-commando. In plaats van de alias kun je ook het werkelijke hostadres (IP of domein) direct invoeren. Je kunt ook jokertekens (*, ?) gebruiken.

  • Inspringing: De opties onder Host moeten worden ingesprongen. Je kunt spaties of tabs gebruiken, maar het is beter om consistent te blijven.

  • Opties: Onder de Host-sectie lijst je verschillende SSH-opties die van toepassing zijn wanneer je met deze alias inlogt. Deze opties zijn dezelfde als die je eerder in de vorm van ssh -optie hebt gebruikt.

Veelgebruikte opties

Optie Beschrijving Voorbeeldwaarde
HostName Het IP-adres of de domeinnaam van de server waarop je toegang zoekt 192.168.1.100 of example.com
User Gebruikersnaam voor toegang tot de externe server ubuntu, ec2-user, root
Port Het SSH-poortnummer van de externe server (standaard 22) 2222
IdentityFile Pad naar het privésleutelbestand dat gebruikt zal worden voor de verbinding ~/.ssh/id_ed25519_myserver
ForwardAgent SSH-agent forwarding inschakelen (Agent Forwarding, bij gebruik van ssh-agent) ja
StrictHostKeyChecking Of hostkey-controle streng moet zijn (ja aanbevolen) nee (tijdelijk gebruiken tijdens initiële tests)
PortForwarding Of poortforwarding is toegestaan ja
LocalForward Instelling voor lokale poortforwarding (-L optie) 8080 localhost:80
ServerAliveInterval Interval voor het controleren of de server actief is (in seconden) 60 (voorkomen van verbroken verbinding)
ServerAliveCountMax Aantal pogingen om de verbinding te behouden voordat deze wordt verbroken bij servercontrole-fouten 3

Voorbeeld van het schrijven van een SSH Config-bestand

Laten we instellingen voor een paar vaak benaderde servers toevoegen aan het ~/.ssh/config-bestand.

# Eerste server: webserver (alias: webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver # Sleutel voor webserver

# Tweede server: ontwikkelingsserver (alias: devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev # RSA-sleutel
    # Poort 8000 lokaal doorsturen naar poort 80 op de externe server
    LocalForward 8000 localhost:80 

# Derde server: alle AWS EC2-servers (alias: aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # Regelmatig signalen verzenden om verbinding te behouden
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Algemene instellingen voor specifieke IP-bereiken (alias: 10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

Uitleg:

  • webserver: Hiermee kun je inloggen op de 192.168.1.100 server als de gebruiker ubuntu met poort 2222 en de id_ed25519_webserver sleutel.

  • devbox: Je logt in op de dev.example.com server met de gebruiker developer en de id_rsa_dev sleutel, en je forwarded de lokale poort 8000 naar poort 80 op de externe server.

  • aws-*: Dit zijn de instellingen die van toepassing zijn op alle aliassen die beginnen met aws-. Bijvoorbeeld, wanneer je inlogt met aws-prod of aws-dev, worden de User en IdentityFile instellingen automatisch toegepast. HostName wordt prod als je inlogt op aws-prod (gebruik later het ssh aws-prod commando).

  • 10.0.0.*: Voor IP-adressen in het formaat 10.0.0.x wordt automatisch de gebruiker admin en poort 22 ingesteld.


Een magische afbeelding van een netwerk veelhoekkige verbinding

Hoe gebruik je het Config-bestand

Nu je de instellingen in het config-bestand hebt opgeslagen, is het daadwerkelijke inloggen een stuk eenvoudiger. Laten we het voorbeeld volgen:

1. Inloggen met een alias

Voer het SSH-inlogcommando uit met alleen de alias.

  • webserver alias gebruiken:
    ssh webserver
    Voer het wachtwoord in voor sleutel '/home/youruser/.ssh/id_ed25519_webserver':
    ubuntu@webserver-ip:~ $
Dit commando werkt intern als `ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100`.
  • devbox alias gebruiken:
    ssh devbox
    Voer het wachtwoord in voor sleutel '/home/youruser/.ssh/id_rsa_dev':
    developer@devbox-domein:~ $
(Als je ook verbinding maakt met de lokale poort 8000, wordt deze verbonden met poort 80 op dev.example.com)
  • aws-prod (jokerteken alias) gebruiken:
    ssh aws-prod
    Voer het wachtwoord in voor sleutel '/home/youruser/.ssh/aws_ec2_key.pem':
    ec2-user@aws-prod-hostname:~ $

Opmerking: Voor wildcard Host aliassen zoals aws-prod, waarbij de hostnaam niet specifiek is opgegeven, moet je wellicht expliciet de HostName-optie opgeven of de hostnaam op de opdrachtregel specificeren. In het bovenstaande aws-* voorbeeld is de HostName niet opgegeven, dus wanneer je ssh aws-prod uitvoert, probeert de SSH-client prod als hostnaam te interpreteren. Het is gebruikelijk om een duidelijke definitie te gebruiken, zoals Host prod-server gekoppeld aan HostName prod.example.com.


Voordelen van het gebruik van een Config-bestand

  • Gemak: Vervang lange en complexe SSH-opdrachten door korte aliassen, waardoor invoerfouten verminderen en tijd bespaard kan worden.
  • Productiviteit: Je kunt snel schakelen tussen vaak gebruikte servers, wat de efficiëntie verhoogt.
  • Beheerbaarheid: Alle inloggerelateerde instellingen kunnen op één plek worden beheerd, wat onderhoud vergemakkelijkt. Bijvoorbeeld, als het IP-adres van de server verandert, hoef je alleen het config-bestand aan te passen.
  • Beveiliging: Je hoeft geen gevoelige informatie (zoals het pad naar sleutelbestanden) in de opdrachtgeschiedenis achter te laten.

Tot slot

Het SSH Config-bestand is een essentieel hulpmiddel voor elke ontwikkelaar en systeembeheerder die SSH gebruikt. Door dit bestand te gebruiken kun je je SSH-toegangservaring veel gemakkelijker en efficiënter maken. Open het ~/.ssh/config bestand en maak je eigen alias aan!

Lees ook andere berichten gerelateerd aan SSH! Zoek in de zoekbalk aan de rechterkant naar 'ssh' om verschillende artikelen over SSH te bekijken.

Als je vragen hebt, laat het ons dan gerust weten in de comments!