Tutoriel Linux

SSH instellen onder Linux voor uw servers zonder alles opnieuw in te voeren

Débutant4 min de lecture

Wanneer u meerdere machines beheert, eindigen dezelfde SSH-opties snel in de geschiedenis: gebruiker, poort, privésleutel, soms een sprongetje. Het bestand ~/.ssh/config vervangt deze eindeloze regel door een korte naam, bijvoorbeeld ssh preprod.

U hoeft de server niet te wijzigen. Deze configuratie leeft op uw computer en vertelt de OpenSSH client hoe elke machine te bereiken. Het voorkomt vooral dat u de verkeerde sleutel of poort gebruikt wanneer meerdere omgevingen op elkaar lijken.

Maak een invoer per server

Maak de map aan als deze nog niet bestaat, en open vervolgens het configuratiebestand:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config

Voeg vervolgens een blok per machine toe. Hier is preprod alleen een lokale alias. Vervang het adres, het account, de poort en het pad naar de sleutel door uw waarden.

Host preprod
    HostName 192.0.2.44
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_preprod
    IdentitiesOnly yes

U kunt dan ssh preprod uitvoeren. HostName bevat de echte DNS-naam of het IP-adres, User het externe account en Port de SSH-poort. IdentityFile selecteert de verwachte privésleutel. Met IdentitiesOnly yes biedt de client niet alle sleutels aan die door uw SSH-agent zijn geladen, wat onnodige pogingen op een server die de authenticaties beperkt, voorkomt.

Als u al een sleutel gebruikt, controleer dan eerst of deze goed beschermd is. Een privésleutel mag niet leesbaar zijn voor andere accounts op uw computer:

chmod 600 ~/.ssh/id_ed25519_preprod
chmod 600 ~/.ssh/config

De handleiding voor het genereren van een SSH-sleutel op Ubuntu behandelt het maken van het sleutelpair. Kopieer nooit een privésleutel naar de server. Alleen de openbare sleutel hoort thuis in ~/.ssh/authorized_keys aan de andere kant.

Voeg algemene instellingen toe aan het einde van het bestand

Een config bestand kan meerdere Host blokken bevatten. De OpenSSH-client onthoudt de eerste waarde die voor de meeste opties is gevonden. Plaats dus de meest specifieke servers bovenaan en de algemene waarden onderaan.

Host production
    HostName prod.example.net
    User deploy
    IdentityFile ~/.ssh/id_ed25519_production
    IdentitiesOnly yes

Host sauvegarde
    HostName backup.example.net
    User backup
    Port 2201
    IdentityFile ~/.ssh/id_ed25519_backup
    IdentitiesOnly yes

Host *
    ServerAliveInterval 30
    ServerAliveCountMax 3

Het blok Host * is van toepassing op alle aliassen. Het is geschikt voor echt algemene instellingen, hier het periodiek verzenden van een signaal om een bevroren verbinding te detecteren. Vermijd het toevoegen van een sleutel of gebruiker als uw servers niet allemaal hetzelfde account gebruiken.

U kunt ook hosten groeperen die dezelfde regel volgen, met een patroon zoals Host *.intra. Houd de uitzonderingen boven dit blok. Een vage alias of een te vroeg geplaatste algemene regel zorgt vaak voor verrassend gedrag.

Controleer de configuratie voordat u verbinding maakt

De volgende opdracht toont de uiteindelijke configuratie die is berekend voor een alias, zonder een sessie te openen. Het is erg handig na een wijziging:

ssh -G preprod | grep -E '^(hostname|user|port|identityfile|identitiesonly) '

Controleer of hostname, user en port goed overeenkomen met de beoogde machine. Kijk ook naar het pad dat wordt geretourneerd voor identityfile. Als u net een sleutel hebt verplaatst, kan SSH nog steeds naar het oude bestand wijzen.

Voer vervolgens een eenvoudige test uit:

ssh preprod
ssh -v preprod

De optie -v toont de verbindingsstappen en de gelezen configuratiebestanden. Publiceer deze uitvoer niet zomaar in een ticket of chat: het kan uw hostnamen, accounts en lokale paden onthullen.

Wanneer het configuratiebestand niet voldoende is

Een SSH-alias lost de herhaling van opties op. Het corrigeert geen server die uw sleutel weigert, een gesloten poort of een gewijzigde hostfingerprint. Als de authenticatie u vaak om uw wachtwoord vraagt, gebruik dan ssh-agent in plaats van het wachtwoord van de sleutel te verwijderen.

Om een interne service via een bastion te bereiken, behoudt u een aparte invoer met ProxyJump en test deze apart. De SSH-tunnel voldoet aan een andere behoefte: het transporteert een lokale of externe poort, het vervangt niet de configuratie van een host.

  • Beveilig ~/.ssh met chmod 700 ~/.ssh.
  • Beveilig het config bestand en elke privésleutel met chmod 600.
  • Controleer de alias met ssh -G nom_alias voordat u voor de eerste keer verbinding maakt.
  • Test elke nieuwe server met zijn alias, en behoud vervolgens de algemene opties in een Host * blok dat onderaan het bestand staat.

De officiële documentatie ssh_config(5) beschrijft elke richtlijn. Neem twee minuten de tijd om de uitvoer van ssh -G door te nemen voordat u een alias op een productiecomputer gebruikt: het is sneller dan uitzoeken waarom SSH de verkeerde sleutel heeft gekozen.

Linux-computer die is verbonden met meerdere servers voor een SSH-configuratie
Een lokale SSH-configuratie maakt het mogelijk om elke server te bereiken met een specifieke alias.
sudo apt update && sudo apt upgrade