Wesentliche SSH-Befehle für Systemadministratoren
Lernen Sie wichtige SSH-Befehle für Remote-Login, Schlüssel, Konfigurationsdateien, Dateiübertragung, Tunneling, Agents und Fehlerbehebung.
Wichtige SSH-Befehle für Systemadministratoren
Secure Shell (SSH) ist das tägliche Remote-Zugriffswerkzeug für Server und Netzwerkgeräte. Wenn Sie Linux-Systeme verwalten, verwenden Sie SSH-Befehle, um sich anzumelden, Dateien zu kopieren, einmalige Befehle auszuführen, Tunnel zu öffnen und Verbindungsfehler zu beheben.
Dieser Leitfaden konzentriert sich auf die Befehle und Optionen, die Sie während der tatsächlichen Verwaltungsarbeit am wahrscheinlichsten benötigen.
Einrichten grundlegender SSH-Verbindungen
Die grundlegendste Verwendung von SSH besteht darin, eine sichere, interaktive Shell-Sitzung mit einem entfernten Server herzustellen. Die grundlegende Syntax ist unkompliziert und ermöglicht es Ihnen, den Benutzer und den Zielhost anzugeben.
Verbindung zu einem entfernten Server herstellen
Um eine Verbindung zu einem entfernten Server mit Ihrem aktuellen lokalen Benutzernamen herzustellen:
ssh hostname_oder_IP_adresse
Wenn Ihr Benutzername auf dem entfernten Server sich von Ihrem lokalen Benutzernamen unterscheidet, müssen Sie ihn angeben:
ssh benutzername@hostname_oder_IP_adresse
Beispiel:
ssh [email protected]
ssh [email protected]
Angeben eines benutzerdefinierten Ports
Standardmäßig verwendet SSH Port 22. Aus Sicherheitsgründen oder aufgrund spezifischer Netzwerkkonfigurationen hören Server jedoch oft auf einem anderen Port. Sie können einen benutzerdefinierten Port mit dem Flag -p angeben:
ssh -p 2222 benutzername@hostname_oder_IP_adresse
Tipp: Das Ändern des standardmäßigen SSH-Ports (Port 22) ist eine gängige Sicherheitspraxis, um automatisierte Angriffsversuche zu reduzieren, ersetzt jedoch keine starke Authentifizierung.
SSH-Schlüsselbasierte Authentifizierung
Während die Passwortauthentifizierung üblich ist, ist die schlüsselbasierte Authentifizierung die empfohlene und sicherere Methode für SSH. Sie verwendet ein Paar kryptografischer Schlüssel: einen privaten Schlüssel (der auf Ihrem lokalen Rechner geheim gehalten wird) und einen öffentlichen Schlüssel (der auf dem entfernten Server platziert wird).
Generieren von SSH-Schlüsselpaaren
Verwenden Sie ssh-keygen, um ein neues Schlüsselpaar zu generieren. Für die meisten modernen OpenSSH-Setups sind Ed25519-Schlüssel eine gute Standardwahl. Verwenden Sie RSA nur, wenn Sie Kompatibilität mit älteren Systemen oder Richtlinien benötigen, die dies erfordern.
ssh-keygen -t ed25519 -a 100
Dieser Befehl generiert ein Ed25519-Schlüsselpaar und erhöht die Anzahl der Schlüsselableitungsrunden, die zum Schutz der Passphrase des privaten Schlüssels verwendet werden. Der private Schlüssel (id_ed25519) und der öffentliche Schlüssel (id_ed25519.pub) werden normalerweise in ~/.ssh/ gespeichert.
Kopieren Ihres öffentlichen Schlüssels auf einen entfernten Server
Um die schlüsselbasierte Authentifizierung zu aktivieren, muss Ihr öffentlicher Schlüssel in der Datei ~/.ssh/authorized_keys auf dem entfernten Server platziert werden. Das Dienstprogramm ssh-copy-id automatisiert diesen Prozess:
ssh-copy-id benutzername@hostname_oder_IP_adresse
Dieser Befehl fordert Sie einmal zur Eingabe des Passworts des entfernten Benutzers auf, kopiert dann Ihren öffentlichen Schlüssel und setzt die korrekten Berechtigungen. Danach sollten Sie sich ohne Passwort verbinden können (Sie werden jedoch nach der Passphrase Ihres privaten Schlüssels gefragt, falls Sie eine festgelegt haben).
Warnung: Geben Sie Ihren privaten Schlüssel niemals an Dritte weiter. Er sollte strenge Dateiberechtigungen haben, wie z. B. chmod 600 ~/.ssh/id_ed25519.
Verwalten von SSH-Verbindungen und Konfigurationen
Ausführen eines einzelnen Befehls remote
SSH ist nicht nur für interaktive Shells gedacht. Sie können einen einzelnen Befehl direkt auf einem entfernten Server ausführen und dessen Ausgabe an Ihr lokales Terminal zurückgeben lassen.
ssh benutzername@hostname_oder_IP_adresse 'auszuführender_befehl'
Beispiel:
ssh [email protected] 'ls -l /var/log/'
ssh [email protected] 'sudo apt update && sudo apt upgrade -y'
Verwenden der SSH-Konfigurationsdatei (~/.ssh/config)
Für häufige Verbindungen kann das Definieren von Hosts in ~/.ssh/config Zeit sparen und Befehle vereinfachen. Diese Datei ermöglicht es Ihnen, Aliase festzulegen, Benutzer, Ports, private Schlüssel und andere Verbindungsoptionen anzugeben.
Beispiel für einen ~/.ssh/config-Eintrag:
Host webserver
Hostname 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_web
IdentitiesOnly yes
Host devbox
Hostname dev.mydomain.com
User developer
Port 22
IdentityFile ~/.ssh/id_rsa_dev
Sobald konfiguriert, können Sie sich einfach mit dem Alias verbinden:
ssh webserver
ssh devbox
Bewährte Methode: Verwenden Sie die Datei ~/.ssh/config für wiederholte Verbindungen. Sie verbessert die Lesbarkeit, reduziert Tippfehler und hält Verbindungsoptionen an einem Ort. Vermeiden Sie es, die Agent-Weiterleitung global zu aktivieren; schalten Sie sie nur für Hosts ein, die sie wirklich benötigen.
Sichere Dateiübertragung mit SSH
SSH bietet zwei primäre Werkzeuge für sichere Dateiübertragungen: scp und sftp.
scp (Secure Copy Protocol)
scp wird zum Kopieren von Dateien und Verzeichnissen zwischen lokalen und entfernten Hosts verwendet. Es verwendet dieselben Authentifizierungs- und Sicherheitsmechanismen wie SSH.
Kopieren einer Datei von lokal zu remote
scp /pfad/zur/lokalen/datei benutzername@hostname_oder_IP_adresse:/pfad/zum/remote/verzeichnis/
Beispiel:
scp my_app.tar.gz admin@webserver:/var/www/html/
Kopieren einer Datei von remote zu lokal
scp benutzername@hostname_oder_IP_adresse:/pfad/zur/remote/datei /pfad/zum/lokalen/verzeichnis/
Beispiel:
scp admin@webserver:/var/log/nginx/access.log ~/logs/
Rekursives Kopieren eines Verzeichnisses
Verwenden Sie das Flag -r für Verzeichnisse:
scp -r /pfad/zum/lokalen/verzeichnis benutzername@hostname_oder_IP_adresse:/pfad/zum/remote/übergeordneten_verzeichnis/
Beibehalten von Dateiattributen
Um Änderungszeiten, Zugriffszeiten und Modi beizubehalten, verwenden Sie das Flag -p:
scp -p lokaledatei benutzer@remotehost:/remotepfad/
sftp (SSH File Transfer Protocol)
sftp bietet ein interaktives Dateiübertragungsprogramm, ähnlich wie FTP, aber durch SSH gesichert. Es ist ideal für die Verwaltung mehrerer Dateien oder die Durchführung komplexer Verzeichnisoperationen.
Verbindung zu einem SFTP-Server herstellen
sftp benutzername@hostname_oder_IP_adresse
Sobald verbunden, erhalten Sie eine sftp>-Eingabeaufforderung. Häufige Befehle sind:
ls: Remote-Verzeichnisinhalt auflistenlls: Lokalen Verzeichnisinhalt auflistencd remote_verzeichnis: Remote-Verzeichnis wechselnlcd lokales_verzeichnis: Lokales Verzeichnis wechselnget remote_datei: Datei herunterladenput lokale_datei: Datei hochladenmget remote_dateien: Mehrere Dateien herunterladen (Platzhalter unterstützt)mput lokale_dateien: Mehrere Dateien hochladen (Platzhalter unterstützt)exitoderbye: SFTP-Sitzung beenden
Beispiel einer SFTP-Sitzung:
sftp [email protected]
Connected to 192.168.1.100.
sftp> ls
config.ini data/ logs/ public_html/
sftp> cd public_html
sftp> get index.html
Fetching /public_html/index.html to index.html
sftp> put new_page.html
Uploading new_page.html to /public_html/new_page.html
sftp> bye
SSH-Tunneling und Portweiterleitung
SSH-Tunneling oder Portweiterleitung ermöglicht es Ihnen, sichere Verbindungen zwischen lokalen und entfernten Ports herzustellen, wodurch Sie auf Dienste zugreifen können, die andernfalls durch Firewalls blockiert oder nicht direkt erreichbar wären.
Lokale Portweiterleitung (-L)
Die lokale Weiterleitung ermöglicht es Ihnen, von Ihrem lokalen Rechner aus auf einen Dienst in einem entfernten Netzwerk (oder auf dem entfernten Server selbst) zuzugreifen, als ob er lokal laufen würde.
ssh -L [lokaler_port]:[remote_host]:[remote_port] benutzername@ssh_server
Beispiel: Zugriff auf einen Datenbankserver (Port 3306) in einem privaten Netzwerk über einen Sprunghost ssh_server von Ihrem lokalen Rechner über Port 9000.
ssh -L 9000:db.private.net:3306 [email protected]
Jetzt können Sie sich auf Ihrem lokalen Rechner mit localhost:9000 verbinden, und die Verbindung wird sicher an db.private.net:3306 über jumphost.com weitergeleitet.
Remote-Portweiterleitung (-R)
Die Remote-Weiterleitung macht einen Dienst auf Ihrem lokalen Rechner (oder lokalen Netzwerk) vom entfernten Server aus zugänglich, und möglicherweise für Clients im Netzwerk des entfernten Servers.
ssh -R [remote_port]:[lokaler_host]:[lokaler_port] benutzername@ssh_server
Beispiel: Machen Sie einen lokalen Webserver (Port 8000) vom ssh_server aus über Port 8080 zugänglich.
ssh -R 8080:localhost:8000 admin@remote_server.com
Jetzt kann jeder auf remote_server.com auf Ihren lokalen Webserver zugreifen, indem er sich mit localhost:8080 auf remote_server.com verbindet.
Dynamische Portweiterleitung (-D)
Die dynamische Portweiterleitung erstellt einen SOCKS-Proxy, der es Ihnen ermöglicht, Ihren gesamten Datenverkehr (oder anwendungsspezifischen Datenverkehr) durch den SSH-Tunnel zu leiten. Dies ist nützlich, um Firewalls zu umgehen oder das Surfen zu sichern.
ssh -D [lokaler_port] benutzername@ssh_server
Beispiel: Erstellen Sie einen SOCKS-Proxy auf Ihrem lokalen Rechner über Port 1080 durch ssh_server.
ssh -D 1080 [email protected]
Konfigurieren Sie Ihren Browser oder Ihre Anwendung so, dass localhost:1080 als SOCKS5-Proxy verwendet wird, und der gesamte Netzwerkverkehr wird durch jumphost.com getunnelt.
Erweiterte SSH-Nutzung und Tipps
Ausführen von Befehlen im Hintergrund
Für nicht-interaktive Befehle, die ausgeführt und sich trennen sollen, können Sie das Flag -f (geht vor der Befehlsausführung in den Hintergrund) und -N (führt keinen entfernten Befehl aus) verwenden.
ssh -f -N -L 9000:db.private.net:3306 [email protected]
Dies richtet eine lokale Portweiterleitung im Hintergrund ein.
SSH-Agent und ssh-add
Der ssh-agent ist ein Programm, das Ihre privaten Schlüssel im Speicher hält, sodass Sie Ihre Passphrase nur einmal pro Sitzung eingeben müssen. ssh-add fügt Schlüssel zum Agenten hinzu.
# Agent starten (falls nicht bereits ausgeführt)
eval "$(ssh-agent -s)"
# Ihren Schlüssel zum Agenten hinzufügen
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_web # Für einen bestimmten Schlüssel
Die Agent-Weiterleitung kann es Ihnen ermöglichen, sich von einem Sprunghost aus bei einem anderen Server zu authentifizieren, ohne Ihren privaten Schlüssel auf den Sprunghost zu kopieren. Verwenden Sie sie sparsam: Ein kompromittierter Sprunghost könnte Ihren weitergeleiteten Agenten verwenden, während Ihre Sitzung aktiv ist. Bevorzugen Sie ProxyJump, wenn Sie nur eine Bastion passieren müssen.
ssh -J [email protected] [email protected]
Persistente SSH-Verbindungen (ControlMaster)
Für schnellere Verbindungen und reduzierten Overhead ermöglicht ControlMaster in Ihrer ~/.ssh/config mehreren SSH-Sitzungen, eine einzige Netzwerkverbindung zu teilen.
Host *
ControlMaster auto
ControlPath ~/.ssh/control/%C
ControlPersist 4h
Diese Konfiguration erstellt einen Control-Socket für die erste Verbindung (ControlMaster auto), und nachfolgende Verbindungen zum selben Host werden diesen Socket für bis zu 4 Stunden wiederverwenden (ControlPersist 4h).
Fehlerbehebung bei SSH-Problemen
- Permission Denied: Überprüfen Sie die Dateiberechtigungen für private Schlüssel (
chmod 600 ~/.ssh/id_ed25519), öffentliche Schlüssel (chmod 644 ~/.ssh/id_ed25519.pub) und das.ssh-Verzeichnis (chmod 700 ~/.ssh). Stellen Sie auf dem Server sicher, dass~/.ssh/authorized_keysdie Berechtigungchmod 600und~/.sshdie Berechtigungchmod 700hat. - Connection Timed Out: Der Server könnte ausgefallen sein, die Firewall blockiert Port 22 (oder den benutzerdefinierten Port), oder die IP-Adresse ist falsch.
- Ausführliche Ausgabe: Verwenden Sie die Flags
-v,-vvoder-vvvmitsshfür detaillierte Debug-Informationen.ssh -vvv [email protected]
Fazit
Halten Sie Ihren täglichen SSH-Workflow einfach: Verwenden Sie schlüsselbasierte Authentifizierung, speichern Sie wiederholte Optionen in ~/.ssh/config, kopieren Sie Dateien mit scp oder sftp, und erreichen Sie private Dienste mit -L, -R, -D oder -J, wenn nötig. Wenn eine Verbindung fehlschlägt, ist ssh -vvv normalerweise der schnellste Weg, um zu sehen, ob das Problem DNS, Routing, Authentifizierung oder Serverrichtlinie ist.