Wer drei oder mehr Server betreut, hat schon mal rsync getippt, kurz gestockt und sich gefragt: War es -a oder -r? Brauche ich --delete? Wo gehört der Slash am Ende hin? Allein der Slash am Ende hat mehr Ausfälle verursacht, als man zugeben mag.
1. Sync mit typischen Ausschlüssen
$ clai rsync diesen Ordner nach staging:/srv/app/ ohne node_modules und .git→ rsync -avz --delete --exclude='node_modules' --exclude='.git' \ ./ staging:/srv/app/
Der Slash hinter ./ zählt. CliAI macht's richtig. Beachte: --delete ist drin, weil „Sync" impliziert, dass das Ziel die Quelle spiegeln soll — das ist aber ein Flag, dessen Bestätigung sich vor Enter lohnt.
2. SSH mit lokalem Port-Forward
$ clai ssh nach prod-db und leite lokalen Port 5432 zum dortigen postgres→ ssh -L 5432:localhost:5432 prod-db
Die Forward-Syntax (-L lokal:remote_host:remote_port) ist eines der Dinge, die sich nicht setzen, bis man sie ein Jahr lang wöchentlich nutzt.
3. SCP eines Verzeichnisses
$ clai scp gesamtes reports-Verzeichnis von staging:/srv/reports nach ./reports→ scp -r staging:/srv/reports ./reports
-r ist Pflicht für Verzeichnisse; ohne es macht scp still nichts Nützliches. CliAI weiß es; du musst nicht.
4. Rechte und Zeitstempel erhalten
$ clai kopiere /etc/nginx von prod hierher, mit Rechten und Zeitstempeln→ rsync -avz --rsync-path='sudo rsync' prod:/etc/nginx/ ./nginx-backup/
--rsync-path='sudo rsync' ist das Muster, wenn der Quellpfad Root zum Lesen braucht, du aber als normaler User per ssh kommst. Schwer zu erinnern, leicht zu erfragen.
Hinweis zur Authentifizierung
CliAI generiert den Befehl; SSH-Schlüssel und Hosts richtest du selbst ein. Wenn ssh staging in deinem Terminal nicht funktioniert, tut es der generierte Befehl auch nicht. Einmalig in ~/.ssh/config und ssh-agent investieren — die Einzeiler zahlen das ewig zurück.
Siehe auch
- Komprimieren und nach S3 hochladen — wenn „Remote" Object Storage ist und keine andere Maschine.
- Netzwerk-Triage — wenn der Remote-Befehl wegen Netz scheitert, nicht wegen Syntax.