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 auflls: Listet lokale Verzeichnisinhalte aufcd remote_directory: Wechselt in ein entferntes Verzeichnislcd local_directory: Wechselt in ein lokales Verzeichnisget remote_file: Lädt eine Datei herunterput local_file: Lädt eine Datei hochmget remote_files: Lädt mehrere Dateien herunter (Wildcards unterstützt)mput local_files: Lädt mehrere Dateien hoch (Wildcards unterstützt)exitoderbye: 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_keysdie Berechtigungchmod 600und~/.sshdie Berechtigungchmod 700hat. - 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,-vvoder-vvvmitsshfü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.