Skip to content

Latest commit

 

History

History
235 lines (177 loc) · 10.6 KB

File metadata and controls

235 lines (177 loc) · 10.6 KB

🔐 SSH-Agent, ProxyJump & Rsync-Synchronisation — Tag 22

Linux Essentials Day 22 Header

Entwickler & Administrator: Tobias Boyke
Status: 🚀 100% Dokumentiert & LPIC-1 Fokussiert
Kompatibilität: Rocky Linux Debian Arch Linux


📑 Inhaltsverzeichnis


🔑 1. SSH-Agent: Private Keys im Arbeitsspeicher verwalten

Der ssh-agent ist ein Hintergrunddienst (Daemon), der private SSH-Schlüssel entschlüsselt im RAM vorhält. Dadurch entfällt die wiederholte Eingabe der Passphrase bei Verbindungen zu Servern.

A. Funktionsweise & Nutzen des SSH-Agenten

  • Sicherer Arbeitsspeicher: Private Schlüssel liegen nicht permanent unverschlüsselt auf dem Speichermedium, sondern werden verschlüsselt abgelegt und durch den ssh-agent nur im RAM der laufenden Benutzersitzung temporär entschlüsselt gehalten.
  • Passwortfreies Arbeiten: Der SSH-Agent übernimmt die kryptografische Signierung von Anfragen des SSH-Clients automatisch im Hintergrund.
  • Schutz vor Diebstahl: Wenn Sie Ihren PC verlassen, können Sie den Agenten leeren, sodass Unbefugte keinen Zugriff auf die Remote-Systeme erlangen.

B. Praxis-Befehle: Schlüssel laden & entfernen

# Starten des SSH-Agenten für die aktuelle Shell-Session
eval $(ssh-agent -s)

# Prüfen, welche Schlüssel derzeit im Agenten geladen sind
ssh-add -l

# Einen bestimmten privaten Schlüssel zum Agenten hinzufügen (Passphrase wird einmalig abgefragt)
ssh-add ~/.ssh/id_ed25519

# Alle geladenen Schlüssel aus dem Agenten löschen (z.B. beim Verlassen des Arbeitsplatzes)
ssh-add -D

🦘 2. Multi-Hop Verbindungen: SSH-Agent-Forwarding vs. ProxyJump

Wenn ein Zielsystem nur über einen dazwischengeschalteten Server (Jump-Host oder Bastion-Host) erreichbar ist, muss der SSH-Schlüssel zur Authentifizierung verwendet werden. Hierfür gibt es zwei Verfahren.

A. Agent Forwarding (Klassisch / Sicherheitsrisiko)

Beim Agent-Forwarding (ssh -A) wird der Zugriff auf den lokalen SSH-Agenten an den Jump-Host durchgereicht.

  • Ablauf: ssh -A benutzer@jump-host -> ssh benutzer@ziel-host

Warning

Sicherheitsrisiko: Besitzt ein Angreifer Root-Rechte auf dem Jump-Host, kann er das weitergeleitete Socket des SSH-Agenten unter /tmp/ssh-* entführen und die Identität des Clients annehmen, um sich auf nachgelagerte Systeme zu verbinden.

B. ProxyJump (Modern / Best Practice)

ProxyJump ist die moderne, sichere Alternative (ab OpenSSH 7.3).

  • Ablauf: Der lokale Client baut einen verschlüsselten SSH-Kanal durch den Jump-Host direkt zum Ziel-Host auf (Ende-zu-Ende-Verschlüsselung).
  • Der Jump-Host sieht nur verschlüsselten SSH-Traffic und hat zu keinem Zeitpunkt Zugriff auf den SSH-Agenten oder die Private Keys.

C. Praktische Konfiguration unter ~/.ssh/config

Für eine transparente Nutzung konfigurieren Sie Ihre lokale SSH-Client-Konfiguration in ~/.ssh/config:

# Jump-Host definieren
Host srv-rocky
    HostName 172.16.7.33
    User simus
    IdentityFile ~/.ssh/id_ed25519

# Zielsystem über den Jump-Host konfigurieren
Host srv-deb-02
    HostName 172.16.7.65
    User semus
    IdentityFile ~/.ssh/id_ed25519
    ProxyJump srv-rocky

Damit genügt folgendes Kommando, um sich direkt und sicher über den Jump-Host zu verbinden:

ssh srv-deb-02

🔄 3. Rsync: Fortgeschrittene Synchronisation & Automatisierung

rsync (Remote Synchronization) ist ein robustes Werkzeug zur inkrementellen Synchronisation von Dateien und Ordnern.

A. Rsync Kern-Optionen & Best Practices

  • -a (Archive): Erhält Berechtigungen, Eigentümer, Gruppen, Symlinks und Zeitstempel. Kopiert rekursiv.
  • -v (Verbose): Ausführliche Protokollierung.
  • -P (Progress / Partial): Zeigt den Fortschrittsbalken und erlaubt die Wiederaufnahme abgebrochener Übertragungen.
  • -z (Compress): Komprimiert die Daten während der Übertragung (sehr nützlich über das Netzwerk).
  • --delete: Erstellt ein echtes Spiegelbild (löscht Dateien im Ziel, die in der Quelle nicht mehr existieren).
  • --dry-run: Simuliert den Befehl, um fatale Überschreibungen oder Löschungen zu verhindern.

Caution

Ein abschließender Schrägstrich / an der Quelle synchronisiert den Inhalt des Verzeichnisses. Fehlt der /, wird das Verzeichnis selbst kopiert.

  • rsync -a /src /dest -> Erzeugt /dest/src/
  • rsync -a /src/ /dest -> Kopiert Inhalt direkt in /dest/

B. Pull- & Push-Verfahren über SSH

# PUSH (Lokale Dokumente auf Remote-Server sichern)
rsync -avzP --delete /home/semus/Dokumente/ semus@172.16.7.33:~/backup/

# PULL (Remote-Dokumente auf lokalen Client herunterladen)
rsync -avzP --delete semus@172.16.7.33:~/backup/ /home/semus/Dokumente/

C. Automatisierung über Cronjobs

Um ein Backup jede Nacht um 01:00 Uhr automatisch auszuführen, wird ein Cronjob angelegt:

# crontab -e
0 1 * * * rsync -az --delete /home/semus/Dokumente/ semus@172.16.7.33:~/backup/

D. Echtzeit-Synchronisation mit Lsyncd (Inotify & Lua-Config)

Für Szenarien, in denen Dateien sofort nach dem Speichern synchronisiert werden müssen (z.B. Load-Balancer-Cluster), verwendet man lsyncd (Live Syncing Daemon). Es lauscht über das Linux-Kernel-Feature inotify auf Dateisystem-Events und stößt im Hintergrund rsync-Prozesse an.

1. Installation (Debian/Mint)

sudo apt update
sudo apt install lsyncd -y

2. Konfiguration erstellen (/etc/lsyncd/lsyncd.conf.lua)

Erstellen Sie das Verzeichnis und die Konfigurationsdatei in Lua:

sudo mkdir -p /etc/lsyncd
sudo nano /etc/lsyncd/lsyncd.conf.lua

Inhalt der Konfiguration:

settings {
    nodaemon = false,
    statusFile = "/var/log/lsyncd/lsyncd.status",
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusInterval = 10
}

sync {
    default.rsyncssh,
    source = "/home/semus/Documents/",
    host = "semus@172.16.7.65",
    targetdir = "/home/semus/backup/",
    rsync = {
        archive = true,
        compress = true,
        _extra = { "--delete" }
    },
    delay = 2
}

3. Dienst starten und aktivieren

sudo systemctl enable --now lsyncd
sudo systemctl status lsyncd

🔑 Keywords

Keyword / Befehl Erklärung
ssh-agent Hintergrunddienst, der SSH-Schlüssel entschlüsselt im RAM hält, um Passphrase-Eingaben zu vermeiden.
ssh-add Fügt einen privaten SSH-Schlüssel dem laufenden ssh-agent hinzu.
ProxyJump SSH-Verbindungsoption zum Tunneln über ein transitives System (Jump Host) in geschützte Netze.
lsyncd Live Syncing Daemon: Überwacht Verzeichnisse und synchronisiert sie bei Änderungen sofort via rsync.
inotifywait Kernel-basiertes Tool zur Überwachung von Dateisystem-Ereignissen (Erstellung, Löschung, Änderung).

🧠 LPIC-1 Relevanz & Wissenstest

Fragen zu SSH-Agent, ProxyJump & Rsync (Klicken zum Ausklappen)
  1. Welches Signal sendet das Kommando ssh-add -D an den SSH-Agenten?

    AntwortEs weist den SSH-Agenten an, alle geladenen privaten Schlüssel unwiderruflich aus dem Arbeitsspeicher (RAM) zu entfernen.
  2. Warum ist ProxyJump dem Agent Forwarding aus Sicherheitsperspektive vorzuziehen?

    AntwortWeil beim Agent-Forwarding der private Schlüssel über das weitergeleitete Socket des SSH-Agenten auf dem Jump-Host kompromittiert werden kann, falls dort ein Angreifer Root-Rechte hat. ProxyJump stellt eine Ende-zu-Ende verschlüsselte Verbindung her, bei der der Jump-Host nur verschlüsselte Pakete durchleitet.
  3. Welche Konfigurationsanweisung in der Datei ~/.ssh/config schaltet den ProxyJump für einen Zielhost target über den Server jump aktiv?

    AntwortDie Option ProxyJump jump innerhalb des Host-Blocks von target.
  4. Welches Kernel-Subsystem nutzt lsyncd unter Linux, um Dateiänderungen ohne permanentes Filesystem-Polling zu detektieren?

    AntwortDas inotify-Framework des Linux-Kernels.
  5. Mit welcher Option führt man eine risikofreie Simulation eines Rsync-Kommandos durch?

    AntwortMit der Option --dry-run.

📚 Ressourcen & Dokumente

Im Assets-Verzeichnis finden Sie weiterführende Informationen:


🔗 Zurück zur Übersicht


Erstellt & gepflegt von Tobias Boyke, Juni 2026.