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 auflisten
  • lls: Lokalen Verzeichnisinhalt auflisten
  • cd remote_verzeichnis: Remote-Verzeichnis wechseln
  • lcd lokales_verzeichnis: Lokales Verzeichnis wechseln
  • get remote_datei: Datei herunterladen
  • put lokale_datei: Datei hochladen
  • mget remote_dateien: Mehrere Dateien herunterladen (Platzhalter unterstützt)
  • mput lokale_dateien: Mehrere Dateien hochladen (Platzhalter unterstützt)
  • exit oder bye: 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_keys die Berechtigung chmod 600 und ~/.ssh die Berechtigung chmod 700 hat.
  • 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, -vv oder -vvv mit ssh fü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.