SSH ohne Passwort: Mehr Effizienz durch die SSH-Config-Datei (System Admin to DevOps)

Melden

Im Alltag eines System Administrators gehört das Verbinden mit verschiedenen Servern zur Routine. Oft tippt man dabei lange Befehle wie ssh -i ~/.ssh/mein_schluessel.pem benutzername@192.168.1.50 -p 2222.

Auf dem Weg zum DevOps Engineer lautet das Motto jedoch: Automatisieren, vereinfachen und standardisieren.

In diesem Tutorial lernst du, wie du die passwortlose Authentifizierung per SSH einrichtest und sie mit der mächtigen ~/.ssh/config-Datei so vereinfachst, dass am Ende ein simpler Befehl wie ssh webserver genügt.


Schritt 1: SSH-Schlüsselpaar generieren

Bevor wir Passwörter eliminieren können, benötigen wir ein kryptografisches Schlüsselpaar (Public & Private Key). Heutzutage gilt der Ed25519-Algorithmus als Standard, da er schneller und sicherer als ältere RSA-Schlüssel ist.

Führe auf deinem lokalen Rechner folgenden Befehl aus:

ssh-keygen -t ed25519 -C "devops-laptop"
  1. Speicherort: Bestätige den Standardpfad (~/.ssh/id_ed25519) mit Enter.
  2. Passphrase: Vergib im Idealfall ein Passwort für deinen Schlüssel (DevOps-Best-Practice, um den Schlüssel lokal zu schützen).

Du hast nun zwei Dateien in ~/.ssh/:

  • id_ed25519 (Dein privater Schlüssel – niemals weitergeben!)
  • id_ed25519.pub (Dein öffentlicher Schlüssel – dieser kommt auf den Server)

Schritt 2: Public Key auf den Server übertragen

Damit der Server dich erkennt, muss dein öffentlicher Schlüssel in die Datei ~/.ssh/authorized_keys auf dem Zielserver kopiert werden.

Der schnellste und sicherste Weg dafür ist das Tool ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub benutzer@deine-server-ip

Gib ein letztes Mal das Passwort des Nutzers auf dem Server ein. Ab jetzt kannst du dich ohne Server-Passwort einloggen:

ssh benutzer@deine-server-ip

Schritt 3: Der Game-Changer – Die SSH-Config-Datei

Statt dir IP-Adressen, Ports, unterschiedliche Benutzernamen oder gar verschiedene Schlüssel merken zu müssen, nutzen wir die clientseitige Datei ~/.ssh/config.

1. Config-Datei anlegen

Erstelle die Datei auf deinem lokalen Rechner, falls sie noch nicht existiert, und setze die richtigen Rechte:

touch ~/.ssh/config
chmod 600 ~/.ssh/config

2. Konfiguration definieren

Öffne die Datei in einem Editor (z.B. nano ~/.ssh/config) und trage deine Server nach folgendem Muster ein:

# Produktiver Webserver
Host prod-web
    HostName 192.168.1.50
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

# Datenbank im Test-Netzwerk
Host staging-db
    HostName db.staging.intern
    User postgres
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Erklärung der Parameter:

  • Host: Ein beliebiger Alias (Kurzname), den du frei wählen kannst.
  • HostName: Die echte IP-Adresse oder Domain des Servers.
  • User: Der Benutzername, unter dem du dich verbindest.
  • Port: Der SSH-Port (nützlich, wenn der Standard-Port 22 geändert wurde).
  • IdentityFile: Der Pfad zu dem privaten Schlüssel, der verwendet werden soll.

3. Das Ergebnis testen

Statt des langen Befehls tippst du jetzt nur noch:

ssh prod-web

SSH liest die Konfiguration aus, wählt den richtigen Benutzer, den richtigen Port, den richtigen Schlüssel und stellt die Verbindung ohne Passwortabfrage her.


Schritt 4: DevOps Pro-Tipps für Fortgeschrittene

1. SCP und Rsync vereinfachen

Die Aliase aus deiner SSH-Config funktionieren auch mit Tools wie scp oder rsync.

Dateien kopieren wird damit extrem simpel:

# Kopiert eine Datei auf den konfigurierten Webserver
scp app.tar.gz prod-web:/var/www/

2. Jump Hosts (Bastion Hosts)

Im DevOps-Umfeld befinden sich Datenbanken oder Backend-Server oft in privaten Netzwerken und sind nur über einen "Bastion Host" erreichbar. Die Config-Datei löst das mit einer einzigen Zeile (ProxyJump):

# Öffentlicher Bastion-Server (Sprungserver)
Host bastion
    HostName 203.0.113.10
    User jumpuser
    IdentityFile ~/.ssh/id_ed25519

# Interner Datenbank-Server (nicht öffentlich erreichbar)
Host intern-db
    HostName 10.0.1.25
    User dbadmin
    IdentityFile ~/.ssh/id_ed25519
    ProxyJump bastion

Ein Aufruf von ssh intern-db verbindet dich nun automatisch über den Bastion-Server direkt auf die interne Datenbank – ohne manuelle SSH-Tunnels!

3. Standard-Einstellungen für alle Hosts setzen

Du kannst globale Optionen mit Host * ganz oben in die Datei schreiben:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

Dies sendet alle 60 Sekunden ein Keep-Alive-Signal an die Server, damit Verbindungen nicht unerwartet abbrechen.


Fazit

Der Umstieg von der manuellen Passworteingabe zur SSH-Config ist einer der ersten großen Schritte vom klassischen System Administrator zum effizienten DevOps Engineer.

Du sparst nicht nur täglich Zeit und vermeidest Tippfehler, sondern schaffst auch die Grundlage, um Skripte, Ansible-Playbooks und CI/CD-Pipelines nahtlos mit deiner Infrastruktur kommunizieren zu lassen.

0