Wesentliche SSH-Befehle für Systemadministratoren

Meistern Sie mit diesem umfassenden Leitfaden wesentliche SSH-Befehle für Systemadministratoren. Erfahren Sie, wie Sie sich sicher mit Remote-Servern verbinden, Konfigurationen verwalten und effiziente Dateiübertragungen mithilfe von `scp` und `sftp` durchführen. Tauchen Sie ein in fortgeschrittene Themen wie lokales, entferntes und dynamisches Port-Forwarding (SSH-Tunneling), um den Netzwerkzugriff zu sichern und zu optimieren. Praktische Beispiele, Tipps zur schlüsselbasierten Authentifizierung, zu `ssh-agent` und Schritte zur Fehlerbehebung werden Sie in die Lage versetzen, Ihre Infrastruktur souverän zu verwalten und die Effizienz Ihrer Remote-Administration zu steigern.

38 Aufrufe

Essenzielle SSH-Befehle für Systemadministratoren

Einleitung

Secure Shell (SSH) ist das Fundament der sicheren Fernverwaltung von Servern und Netzwerkgeräten. Für Systemadministratoren ist die Beherrschung von SSH nicht nur eine Fähigkeit – es ist eine grundlegende Notwendigkeit, um die Infrastruktur effizient und sicher zu verwalten. SSH bietet einen sicheren Kanal über ein unsicheres Netzwerk, indem es starke Verschlüsselung verwendet und sicherstellt, dass die gesamte Kommunikation, einschließlich Passwörter, Befehle und Dateiübertragungen, vertraulich und vor Mithören geschützt bleibt.

Dieser Artikel dient als umfassender Leitfaden zu den wichtigsten SSH-Befehlen und -Konzepten, die jeder Systemadministrator kennen sollte. Wir werden uns mit allem befassen, von grundlegenden Verbindungsmethoden und sicheren Dateiübertragungen bis hin zu fortgeschrittenen Techniken wie Port-Weiterleitung und persistenten Verbindungen. Durch das Verständnis und die Anwendung dieser Befehle und Best Practices können Sie Ihre Fähigkeiten zur Fernverwaltung von Servern erheblich verbessern, Arbeitsabläufe rationalisieren und eine robuste Sicherheitslage in Ihren Umgebungen aufrechterhalten.

Aufbau grundlegender SSH-Verbindungen

Der grundlegendste Anwendungsfall von SSH ist der Aufbau einer sicheren, interaktiven Shell-Sitzung mit einem entfernten Server. Die grundlegende Syntax ist unkompliziert und ermöglicht es Ihnen, den Benutzer und den Zielhost anzugeben.

Verbindung zu einem entfernten Server

Um eine Verbindung zu einem entfernten Server unter Verwendung Ihres aktuellen lokalen Benutzernamens herzustellen:

ssh hostname_oder_IP_adresse

Wenn Ihr Benutzername auf dem entfernten Server von Ihrem lokalen Benutzernamen abweicht, müssen Sie ihn angeben:

ssh benutzername@hostname_oder_IP_adresse

Beispiel:

ssh [email protected]
ssh [email protected]

Angabe eines benutzerdefinierten Ports

Standardmäßig verwendet SSH Port 22. Aus Sicherheitsgründen oder aufgrund spezifischer Netzwerkkonfigurationen lauschen 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: Die Änderung des Standard-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 passwortbasierte Authentifizierung ü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. Es wird empfohlen, eine starke Passphrase für Ihren privaten Schlüssel zu verwenden.

ssh-keygen -t rsa -b 4096

Dieser Befehl generiert ein RSA-Schlüsselpaar mit einer Länge von 4096 Bit. Der private Schlüssel (id_rsa) und der öffentliche Schlüssel (id_rsa.pub) werden normalerweise in ~/.ssh/ gespeichert.

Kopieren Ihres öffentlichen Schlüssels auf einen entfernten Server

Um die schlüsselbasierte Authentifizierung zu ermöglichen, muss Ihr öffentlicher Schlüssel in der Datei ~/.ssh/authorized_keys auf dem entfernten Server abgelegt werden. Das Dienstprogramm ssh-copy-id automatisiert diesen Vorgang:

ssh-copy-id benutzername@hostname_oder_IP_adresse

Dieser Befehl fordert Sie einmalig 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 anmelden können (obwohl Sie nach der Passphrase Ihres privaten Schlüssels gefragt werden, wenn Sie eine festgelegt haben).

Warnung: Teilen Sie niemals Ihren privaten Schlüssel mit jemandem. Er sollte strenge Dateiberechtigungen haben (chmod 600 ~/.ssh/id_rsa).

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 auf einem entfernten Server direkt ausführen und dessen Ausgabe auf Ihrem lokalen Terminal zurückgeben.

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 die Definition 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
    ForwardAgent yes

Host devbox
    Hostname dev.mydomain.com
    User developer
    Port 22
    IdentityFile ~/.ssh/id_rsa_dev

Nach der Konfiguration können Sie sich einfach durch Eingabe des Alias verbinden:

ssh webserver
ssh devbox

Best Practice: Verwenden Sie immer die Datei ~/.ssh/config zur Verwaltung komplexer SSH-Verbindungen. Sie verbessert die Lesbarkeit, reduziert Tippfehler und zentralisiert Ihre Konfigurationen.

Sichere Dateiübertragung mit SSH

SSH bietet zwei Hauptwerkzeuge für die sichere Dateiübertragung: scp und sftp.

scp (Secure Copy Protocol)

scp wird zum Kopieren von Dateien und Verzeichnissen zwischen lokalen und entfernten Hosts verwendet. Es nutzt die gleichen Authentifizierungs- und Sicherheitsmechanismen wie SSH.

Kopieren einer Datei von lokal nach remote

scp /pfad/zur/lokalen/datei benutzername@hostname_oder_IP_adresse:/pfad/zum/entfernten/verzeichnis/

Beispiel:

scp my_app.tar.gz admin@webserver:/var/www/html/

Kopieren einer Datei von remote nach lokal

scp benutzername@hostname_oder_IP_adresse:/pfad/zur/entfernten/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:

rscp -r /pfad/zum/lokalen/verzeichnis benutzername@hostname_oder_IP_adresse:/pfad/zum/übergeordneten/entfernten/verzeichnis/

Beibehalten von Dateiattributen

Um Änderungszeiten, Zugriffszeiten und Modi beizubehalten, verwenden Sie das Flag -p:

scp -p lokale_datei benutzer@entfernter_host:/entfernter_pfad/

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

sftp benutzername@hostname_oder_IP_adresse

Sobald Sie verbunden sind, erhalten Sie eine sftp>-Eingabeaufforderung. Gängige Befehle sind:

  • ls: Listet entfernte Verzeichnisinhalte auf
  • lls: Listet lokale Verzeichnisinhalte auf
  • cd remote_directory: Wechselt in ein entferntes Verzeichnis
  • lcd local_directory: Wechselt in ein lokales Verzeichnis
  • get remote_file: Lädt eine Datei herunter
  • put local_file: Lädt eine Datei hoch
  • mget remote_files: Lädt mehrere Dateien herunter (Wildcards unterstützt)
  • mput local_files: Lädt mehrere Dateien hoch (Wildcards unterstützt)
  • exit oder bye: Beendet die SFTP-Sitzung

Beispiel für eine SFTP-Sitzung:

sftp [email protected]
Verbunden mit 192.168.1.100.
sftp> ls
config.ini  data/  logs/  public_html/
sftp> cd public_html
sftp> get index.html
Lade /public_html/index.html nach index.html herunter
sftp> put new_page.html
Lade new_page.html nach /public_html/new_page.html hoch
sftp> bye

SSH-Tunneling und Port-Weiterleitung

SSH-Tunneling oder Port-Weiterleitung ermöglicht es Ihnen, sichere Verbindungen zwischen lokalen und entfernten Ports herzustellen, wodurch Sie auf Dienste zugreifen können, die möglicherweise durch Firewalls blockiert oder direkt nicht erreichbar sind.

Lokale Port-Weiterleitung (-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 ausgeführt würde.

ssh -L [lokaler_port]:[entfernter_host]:[entfernter_port] benutzername@ssh_server

Beispiel: Zugriff auf einen Datenbankserver (Port 3306) in einem privaten Netzwerk über einen Jump-Host ssh_server von Ihrem lokalen Rechner auf Port 9000 aus.

ssh -L 9000:db.private.net:3306 [email protected]

Nun können Sie sich auf Ihrem lokalen Rechner mit localhost:9000 verbinden, und die Verbindung wird über jumphost.com sicher an db.private.net:3306 weitergeleitet.

Remote Port-Weiterleitung (-R)

Die Remote-Weiterleitung macht einen Dienst auf Ihrem lokalen Rechner (oder im lokalen Netzwerk) vom entfernten Server und potenziell für Clients im Netzwerk des entfernten Servers aus zugänglich.

ssh -R [entfernter_port]:[lokaler_host]:[lokaler_port] benutzername@ssh_server

Beispiel: Einen lokalen Webserver (Port 8000) vom ssh_server auf Port 8080 aus zugänglich machen.

ssh -R 8080:localhost:8000 admin@remote_server.com

Nun kann jeder auf remote_server.com auf Ihren lokalen Webserver zugreifen, indem er sich auf remote_server.com mit localhost:8080 verbindet.

Dynamische Port-Weiterleitung (-D)

Die dynamische Port-Weiterleitung 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 beim Surfen für Sicherheit zu sorgen.

ssh -D [lokaler_port] benutzername@ssh_server

Beispiel: Einen SOCKS-Proxy auf Port 1080 Ihres lokalen Rechners über ssh_server erstellen.

ssh -D 1080 [email protected]

Konfigurieren Sie Ihren Browser oder Ihre Anwendung so, dass localhost:1080 als SOCKS5-Proxy verwendet wird. All sein Netzwerkverkehr wird dann über jumphost.com getunnelt.

Fortgeschrittene SSH-Nutzung und Tipps

Ausführen von Befehlen im Hintergrund

Für nicht-interaktive Befehle, die ausgeführt und dann getrennt werden sollen, können Sie das Flag -f (wechselt 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]

Dadurch wird eine lokale Port-Weiterleitung im Hintergrund eingerichtet.

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.

# Starten Sie den Agenten (falls noch nicht ausgeführt)
eval "$(ssh-agent -s)"
# Fügen Sie Ihren/Ihre Schlüssel zum Agenten hinzu
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_web # Für einen bestimmten Schlüssel

Der ssh-agent ist entscheidend, wenn Sie ForwardAgent yes in Ihrer ~/.ssh/config verwenden. Er ermöglicht es Ihnen, Ihre lokalen Schlüssel zur Authentifizierung vom Jump-Host auf nachfolgende Server zu verwenden, ohne Ihren privaten Schlüssel auf dem Jump-Host abzulegen.

Persistente SSH-Verbindungen (ControlMaster)

Für schnellere Verbindungen und reduzierten Overhead ermöglicht ControlMaster in Ihrer ~/.ssh/config mehreren SSH-Sitzungen die gemeinsame Nutzung einer einzigen Netzwerkverbindung.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/control/%r@%h:%p
    ControlPersist 4h

Diese Konfiguration erstellt einen Steuerungs-Socket für die erste Verbindung (ControlMaster auto), und nachfolgende Verbindungen zum selben Host wiederverwenden diesen Socket bis zu 4 Stunden lang (ControlPersist 4h).

Fehlerbehebung bei SSH-Problemen

  • Permission Denied: Überprüfen Sie die Dateiberechtigungen für private Schlüssel (chmod 600 ~/.ssh/id_rsa), öffentliche Schlüssel (chmod 644 ~/.ssh/id_rsa.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 ist möglicherweise nicht erreichbar, eine 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 Debugging-Informationen.
    bash ssh -vvv [email protected]

Fazit

SSH ist ein unverzichtbares Werkzeug für Systemadministratoren und bietet sicheren und effizienten Fernzugriff, Befehlsausführung und Dateiübertragungsfunktionen. Durch die Beherrschung der in diesem Artikel behandelten Befehle und Techniken – von grundlegenden Verbindungen und schlüsselbasierter Authentifizierung bis hin zu fortgeschrittenem Tunneling und Konfigurationsmanagement – können Sie Ihre Produktivität erheblich steigern und die Sicherheit Ihrer Serverinfrastruktur gewährleisten.

Überprüfen Sie regelmäßig Ihre SSH-Konfigurationen, nutzen Sie die schlüsselbasierte Authentifizierung und setzen Sie leistungsstarke Funktionen wie ~/.ssh/config und ssh-agent ein, um Ihre täglichen Aufgaben zu optimieren. Mit diesen essenziellen SSH-Befehlen sind Sie bestens gerüstet, um entfernte Systeme souverän und präzise zu verwalten. Üben Sie weiter und erkunden Sie die umfangreichen Funktionen, um noch größere Effizienz bei Ihren administrativen Aufgaben zu erzielen.