- 1 Section
- 10 Lessons
- unbegrenzt
- Bash / Shell-Scripting10
- 1.1Was ist eine Shell? bash, sh, zsh im Vergleich
- 1.2Grundlegende Befehle: cd, ls, cp, mv, rm, grep
- 1.3Variablen, Eingabe und Ausgabe
- 1.4Kontrollstrukturen: if, case, for, while
- 1.5Funktionen und Argumente
- 1.6Fehlerbehandlung: exit codes, trap
- 1.7Textverarbeitung: sed, awk, cut, sort
- 1.8Dateisystem-Automation: find, xargs, cron
- 1.9Netzwerk-Scripting: curl, ssh, rsync
- 1.10Praxisprojekt: Systemstatus- und Backup-Script
Netzwerk-Scripting: curl, ssh, rsync
Server kommunizieren ständig miteinander: APIs abfragen, Dateien zwischen Servern synchronisieren, Befehle auf entfernten Maschinen ausführen. Diese Aufgaben heißen Netzwerk-Scripting. Drei Werkzeuge bilden hier das Fundament: curl (HTTP/HTTPS-Requests), ssh (sichere Remote-Shell) und rsync (effiziente Dateisynchronisation).
Alle drei sind auf jedem Linux-Server vorinstalliert und seit Jahren stabil. Ein FISI, der diese drei beherrscht, kann Server-Cluster fernsteuern, Backups zwischen Standorten organisieren und Web-APIs aus Skripten heraus nutzen. Das sind die Werkzeuge mit denen man im Server-Alltag wirklich produktiv ist.
1) Die drei Helden im Überblick
curl kann z.B. lokale APIs ansprechen (localhost), rsync Verzeichnisse innerhalb derselben Maschine synchronisieren. Du musst nicht zwingend mehrere Server haben um sie zu lernen.2) curl – HTTP-Requests aus der Shell
Die Basis: curl URL lädt den Inhalt von der URL und gibt ihn auf stdout aus. So einfach wie ein Browser-Aufruf, nur ohne Rendering:
Die häufigsten Optionen die du dir merken solltest:
curl -v Gold wert – du siehst die kompletten Request- und Response-Header. curl -I reicht oft schon um zu checken ob ein Server lebt. Auch nützlich: curl -w "%{http_code} %{time_total}s\n" -o /dev/null -s URL – gibt Status und Antwortzeit aus.3) REST-APIs mit curl ansprechen
Moderne Webdienste sprechen meist über REST-APIs mit JSON. Curl kann das problemlos:
Das jq-Tool ist DAS Werkzeug für JSON in Bash – ähnlich wie awk für Spalten-Daten. Mit jq '.users[].email' kannst du selektiv aus komplexen JSON-Strukturen Werte ziehen. Nicht überall vorinstalliert – nachinstallieren mit apt install jq. Mehr zu JSON-APIs in K42b JavaScript.
4) Healthcheck-Skript: curl in der Praxis
Ein klassischer FISI-Anwendungsfall: prüfe regelmäßig ob Server-Endpoints erreichbar sind:
Solche Skripte landen in cron und laufen alle 5 Minuten. Bei Fehler: Mail an On-Call-Admin oder Webhook an Slack/Teams. Professionellere Lösungen heißen z.B. Prometheus/Grafana, aber für kleine Setups reicht so ein Bash-Skript völlig.
5) ssh – sichere Remote-Shell
Mit ssh user@server öffnest du eine verschlüsselte Shell auf einem entfernten Server. Was du dort tippst läuft auf dem Remote-System, als säßest du davor:
Wie verbindet sich SSH eigentlich? Klick die Schritte:
~/.ssh/known_hosts. Wenn der sich später ändert (z.B. nach Server-Reinstall) → Warnung „WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!". Das ist Schutz vor Man-in-the-Middle-Angriffen – immer ernst nehmen! Mehr zu dem Konzept in K26 PKI.6) SSH-Keys: passwortlos und sicher
Für Skripte (und überhaupt) willst du nicht jedes Mal ein Passwort eintippen. Außerdem sind SSH-Keys sicherer als Passwörter. Setup in 3 Schritten:
Wichtig: der private Key bleibt IMMER beim Client. Niemals verschicken, nicht in Git, nicht in Backup-Clouds unverschlüsselt. Der public Key darf überallhin – er ist nur das „Schloss" zu dem dein privater Schlüssel passt.
ssh-keygen kannst du eine Passphrase setzen die den private key verschlüsselt – musst sie dann pro Session einmal eingeben (ssh-agent merkt sich das). Auf Servern: PermitRootLogin no und PasswordAuthentication no in /etc/ssh/sshd_config setzen – nur Key-Auth zulassen. Erschwert Brute-Force-Attacken massiv.7) SSH-Konfig: ~/.ssh/config
Wenn du viele Server administrierst, wird ssh anna@server-foo-bar-prod-123.example.com -p 2222 -i ~/.ssh/key nervig. Die ~/.ssh/config macht's elegant:
Jetzt reicht ssh webserver für deine ganze Konfiguration. ProxyJump ist super wichtig: wenn ein Server nur über einen Bastion-Host erreichbar ist, hangelt sich SSH automatisch durch. Praxis-Beispiel: viele Cloud-Setups haben einen einzigen öffentlichen Login-Server, von dem aus interne Server erreicht werden (siehe K31 Cloud-Architektur).
8) scp und sftp – Dateien übertragen
Aus SSH abgeleitet: zwei Tools für File-Transfer:
Für mehrfache Transfers oder Backup-Szenarien aber meistens rsync nehmen – ist viel effizienter (siehe unten). scp nutze ich nur noch für „mal eben eine Datei rüberkopieren".
9) rsync – die effiziente Synchronisation
rsync ist genial: es überträgt nur die Unterschiede zwischen Quelle und Ziel. Hast du letzte Woche schon ein 10-GB-Verzeichnis übertragen und nur eine 1-KB-Datei geändert? rsync überträgt nur diese 1 KB. Das macht es ideal für Backups und Deployments:
Die -av-Standardkombination heißt archive + verbose: behält Rechte, Symlinks, Zeitstempel bei und zeigt was übertragen wird. Fast immer was du willst.
10) Der Slash am Ende ist wichtig!
Eine berüchtigte rsync-Falle:
--dry-run testen! Dann siehst du was rsync tun würde, ohne dass es passiert. Sobald die Liste sauber aussieht, das --dry-run weglassen und scharf schalten.11) rsync-Backup-Pattern
Ein klassischer Server-Backup-Job kombiniert rsync mit cron:
In der Crontab: 0 2 * * * /usr/local/bin/server-backup.sh. Erstellt jede Nacht 2 Uhr einen Sync auf den Backup-Server – nur Änderungen werden übertragen, läuft auch bei großen Datenmengen schnell. Mehr zu Backup-Konzepten in K58 Backup-Strategien.
12) Weitere nützliche Netzwerk-Tools
Außer den drei Helden gibt es noch:
- wget – Alternative zu curl, oft für ganze Webseiten herunterladen (
wget -r). - nc (netcat) – Low-Level-Netzwerk, „Schweizer Messer" für TCP/UDP.
nc -zv host 22testet ob Port 22 offen ist. - nmap – Port-Scanner.
nmap -p 1-1000 hostfindet offene Ports. Nur auf eigenen Systemen! Sonst illegal. - ping, traceroute, dig – Netzwerk-Diagnose (siehe K24 Troubleshooting).
- mosh – SSH-Alternative die mit instabilen Verbindungen besser umgeht (mobile, schlechtes WLAN).
- tmux, screen – Terminal-Multiplexer. Wenn dein langlaufendes Skript per SSH läuft und die Verbindung abbricht: nichts ist verloren wenn du in tmux/screen drin warst.
13) Sicherheit: was nie tun
Drei Anti-Patterns die du beim Netzwerk-Scripting vermeiden solltest:
curl ... | bashaus unbekannten Quellen. Das ist beliebt für Installer (curl install.sh | bash), aber genau so kannst du dir Malware unterjubeln lassen. Lade die Datei runter, schau rein, dann erst ausführen.- Passwörter im Klartext im Skript. Niemals API-Keys oder SSH-Passwörter hartcodieren. Lies sie aus Umgebungsvariablen (
$API_TOKEN) oder einer separaten Konfig-Datei mit eingeschränkten Rechten (chmod 600). Bei größeren Setups: Vaults wie HashiCorp Vault oder AWS Secrets Manager. curl -kin Produktion. Das-k-Flag ignoriert SSL-Zertifikatsfehler. Praktisch beim Testen mit Self-Signed-Certs lokal, aber in Produktion ein Sicherheitsloch (Man-in-the-Middle-Angriffe möglich). Lieber das Zertifikat korrekt installieren – siehe K26 PKI.
Zusammenfassung
curl: HTTP-Anfragen aus der Shell. -o in Datei, -L Redirects, -s silent, -X METHOD, -d data, -H "Header", -u user:pass. Für JSON-APIs: jq dazu. ssh: verschlüsselte Remote-Shell. Login mit ssh user@host, einzelner Befehl mit ssh user@host "befehl". SSH-Keys via ssh-keygen + ssh-copy-id für passwortlosen Login. ~/.ssh/config für Aliase und ProxyJump. scp/sftp für einmalige Transfers. rsync: effiziente Synchronisation, überträgt nur Diffs. -av Standard, --delete entfernt Ziel-Überschüsse, --dry-run zum Testen, --exclude. Slash am Pfad-Ende ist wichtig: mit = Inhalt, ohne = Verzeichnis selbst. Sicherheit: nie curl | bash aus unbekannten Quellen, nie Passwörter hartcodieren, -k nicht in Produktion.
