SSH ohne Passwort: Mehr Effizienz durch die SSH-Config-Datei (System Admin to DevOps)
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"
- Speicherort: Bestätige den Standardpfad (
~/.ssh/id_ed25519) mitEnter. - 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.