Der Einsatz und das Zusammenspiel mehrerer Rechner wie etwa Laptops, Kleinstrechner und Server für alle möglichen Zwecke wird auch im privaten Bereich immer alltäglicher. Eine Verwendung von SSH ist dabei elementar für den sicheren Umgang mit Dateien und Programmen über Rechnergrenzen hinweg. Dieses Dokument führt dazu wesentliche Handgriffe anschaulich zusammen.

Vorbemerkungen

Wer mehrere Rechner mit Linux oder macOS verwendet, findet in Secure Shell (SSH) einen sehr nützlichen Begleiter. Insbesondere die Nutzung von SSH auf der Kommandozeile [7, 8] lässt viele Alltagsschritte schnell und einfach von der Hand gehen und eignet sich auch bestens für die Automatisierung. Der vorliegende Beitrag erklärt die Grundbegriffe des Umgangs mit SSH und schildert einige Handgriffe zur Konfiguration, die jene Alltagsschritte und Automatisierungen beträchtlich erleichtern.

Dabei steht die Public-Key-Authentifizierung besonders im Fokus, da sie sicheren Umgang mit mehreren Rechnern ermöglicht, ohne, dass Nutzer für jeden einzelnen Verbindungsaufbau viele unterschiedliche und komplizierte Kennworte nachhalten und handhaben müssen.

Abkürzung

Wer die Zusammenhänge kennt und nur einen »Spickzettel« gebräuchlichster Befehle sucht, kann direkt zur Zusammenfassung springen.

Konzept

Hinter SSH steht das Konzept, Befehle auf der Kommandozeile (»Shell«) eines lokalen Rechners zu formulieren, die an einen anderen, über das Netz erreichbaren Rechner gerichtet sind. Das »Secure« in Secure Shell steht für die hierbei eingesetzte Verschlüsselung der Kommunikation, die dafür sorgt, dass aller Austausch zwischen besagten Rechnern nicht von Dritten verfolgt und mitgelesen werden kann.

Auf diese Weise entsteht eine gegen Einblicke Dritter gesicherte Fernsteuerung, bei der von der Kommandozeile eines anderen Rechners aus eine Maschine bedient wird, als würde die betreffende Maschine direkt über ihre eigenen Bedienelemente gesteuert und nicht aus der Ferne über eine Netzwerkverbindung.

Der Mechanismus liefert zudem die Grundlage für die sichere Dateiübertragung und damit auch für Funktionen wie Synchronisiserung oder Datensicherung.

Voraussetzungen

Zur Verwendung von SSH zur Fernsteuerung eines entfernten Rechners muss auf dem Rechner, der ferngesteuert wird, ein SSH-Server wie zum Beispiel das Programm openssh-server installiert sein und laufen [1, 2]. Auf dem Rechner, von dem aus der entfernte Rechner ferngesteuert wird, muss ein SSH-Client installiert sein, was beim Mac und den meisten Linux-Versionen bereits der Fall ist.

Eine solche Konfiguration lässt sich auch wechselseitig anlegen, womit dann beide Rechner sowohl ferngesteuert werden als auch als Fernsteuerung dienen können.

Begrifflichkeiten

Dokumentation zur Public-Key-Authentifizierung orientiert sich in der Regel am technischen Verfahren, das für den Zugang zu einem Rechner einen privaten und einen öffentlichen Schlüssel einsetzt. Dieses Bild ist aber zur Erklärung des Ablaufs rein sprachlich nicht so gut geeignet wie zum Beispiel das sprachliche Bild eines Schlosses zum Öffnen einer Tür, zu dem ein Schlüssel passt.

Für dieses Dokument werden deshalb die Begriffe Tür, Schloss und Schlüssel anstelle von port, public key und private key verwendet.

Nutzungsablauf

Die Nutzung von SSH läuft allgemein beschrieben wie folgt ab.

  1. Mit dem Start des Programmes openssh-server auf dem Rechner, der ferngesteuert werden soll, dem Server, richtet der Server eine Tür mit der Nummer 22 ein und lauscht auf Verbindungsanfragen.

  2. Der Server fungiert ab da als Türsteher, der mittels Authentifizierung und Autorisierung dafür sorgt, dass nur Anfragen befugter Nutzer durch Tür Nummer 22 eingelassen werden, andere Anfragen werden abgewiesen.

  3. Auf dem Rechner, der als Fernsteuerung dient, dem Client, wird auf der Kommandozeile das Programm ssh aufgerufen, wodurch eine Verbindungsanfrage an den Server gesendet wird. Der Client klopft quasi an die Tür Nummer 22 des Servers. Beispiel: ssh fred@mein-server

  4. Der Server antwortet mit seinem Fingerprint und der Aufforderung zur Authentifizierung, z.B., indem für den bei der Verbindungsanfrage angegebenen Benutzernamen das Kennwort abgefragt wird.

  5. Der Client vergleicht den Fingerprint des Servers mit dem lokal gespeicherten.

  6. Wurde der Server erstmals kontaktiert, wird der Benutzer vom Client gefragt, ob er der Maschine mit diesem Fingerprint vertrauen möchte [vgl. 3]. Wenn ja, speichert der Client den Fingerprint des Servers für spätere Verbindungsaufnahmen.

  7. Wird der Fingerprint des Servers vom Client akzeptiert und ist das daraufhin vom Nutzer auf dem Client abgefragte und an den Server geschickte Kennwort richtig, etabliert der Server die SSH-Verbindung mit dem Client und öffnet die Tür Nummer 22 für Anfragen des Clients.

  8. Vom Nutzer auf dem Client eingegebene Kommandos werden nun vom Client durch Tür Nummer 22 an den Server gereicht und vom Server ausgeführt. Das Funktioniert für alle Kommandos wie z.B. ls, cp, mv oder chmod, usw. Antworten vom Server werden durch Tür Nummer 22 zurück an den Client gereicht und erscheinen auf der Kommandozeile des Clients, ganz so, als ob die Kommandozeile des Clients die des Servers wäre.

  9. Trifft ein auf dem Client eingegebenes Kommando exit beim Server ein, beendet dieser die SSH-Verbindung und schließt die Tür Nummer 22 zum Client. Das Programm ssh auf dem Client wird beendet.

Der oben beschriebene Ablauf ermöglicht nicht nur eine gegen Einblicke Dritter gesicherte Fernsteuerung. Er stellt mit dem Fingerprint-Abgleich auch sicher, dass kein unbefugter Dritter sich beim Verbindungsaufbau als Server ausgegeben kann.

Vereinfachungen

Was die Nutzung von SSH erst so richtig effizient werden lässt, ist deren Kombination mit der Public-Key-Authentifizierung. Hierzu wird auf dem Client ein Paar aus Schlüssel und Schloss erzeugt und das Schloß in die Tür Nummer 22 des Servers eingebaut (vgl. Nutzungsablauf).

Mit dem auf dem Client abgelegten Schlüssel kann anschließend eine Verbindung ohne weiteres Zutun des Nutzers hergestellt werden. Es genügt der Befehl

ssh mein-server

und schon ist eine Kommandozeile auf dem lokalen Rechner mit dem Server verbunden und kann zu dessen Fernsteuerung dienen.

Die Schritte dahin sind nachfolgend beschrieben.

Schloss und Schlüssel erzeugen

Zum Erzeugen von Schloss und Schlüssel wird folgendes Kommando verwendet

ssh-keygen -t rsa

Die hierbei im Dialog u.a. abgefragte Passphrase muss einstweilen nicht angegeben werden. Es entsteht ein Paar aus Schloss und Schlüssel, das auf dem Client in der Datei ~/.ssh/id_rsa gespeichert wird.

Schloss einbauen

Damit anstelle einer Abfrage des Kenwortes der Schlüssel des Clients auf dem Server zum Öffnen der Tür Nummer 22 verwendet werden kann, muss das Schloss, das sich mit dem Schlüssel des Clients öffnen lässt, auf dem Server eingebaut werden (vgl. Nutzungsablauf). Dies gelingt vom Client aus mit dem Befehl

ssh-copy-id fred@mein-server

So wird das Schloss, das zum Schlüssel in der Datei ~/.ssh/id_rsa des lokalen Rechners passt, in die Tür Nummer 22 des Servers mein-server eingebaut. Dafür wird im Zuge dessen einmalig das Kennwort des Benutzers fred vom Server abgefragt.

Anschließend genügt für den Verbindungsaufbau zum Rechner mein-server der Befehl ssh mein-server. Der lokale Rechner verwendet dann stets den lokal hinterlegten Schlüssel zum Öffnen des Schlosses der Tür 22 von mein-server. Der Nutzer muss nicht mehr bei jedem Verbindungsaufbau sein Kennwort eintippen.

Konfiguration

Sollen vom Client mehrere Server auf diese Weise ferngesteuert werden, bedarf es einer Konfigurationsdatei. Diese wird auf dem Client als Datei ~/.ssh/config angelegt und ist wie folgt aufgebaut.

Beispiel für den Inhalt der Konfigurationsdatei ~/.ssh/config
Host mein-server
    HostName 12.345.678.90
    User fred
    Port 22
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    ForwardAgent no
    PreferredAuthentications publickey

Host example.com
    HostName 90.876.543.21
    User bob
    Port 22
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    ForwardAgent no
    PreferredAuthentications publickey

Der Befehl zum Einbau des Schlosses muss dann vom Client aus an jeden in der Konfiguration befindlichen Server gerichtet werden.

ssh-copy-id fred@mein-server
ssh-copy-id bob@example.com

Schlüssel absichern

Wird beim Erzeugen von Schloss und Schlüssel wie zuvor beschrieben keine Passphrase angegeben, kann die Kopie der Datei ~/.ssh/id_rsa von jedem verwendet werden, um den Server fernzubedienen. In vielen Fällen dürfte die Ablage der Datei auf dem lokalen Rechner dennoch auch ohne Verwendung einer Passphrase ausreichenden Schutz vor Missbrauch bieten, da beispielsweise Daten auf der Festplatte eines Macs mit Apple Silicon verschlüsselt abgelegt und nur mittels Face ID oder Touch ID zugänglich sind.

In Fällen, wo trotzdem der Schlüssel noch zusätzlich abgesichert werden soll, muss bei der Erzeugung von Schloss und Schlüssel die Abfrage der Passphrase mit einer entsprechenden Eingabe ausgefüllt werden. Die Passphrase wird dann jedesmal abgefragt, wenn der Schlüssel genutzt wird.

Um mit dieser Abfrage der Passphrase nicht den Vorteil einzubüßen, dass zur Anmeldung am Server kein Passwort abgefragt wird, kann die Passphrase im Schlüsselbund (Linux) oder der App »Passwörter« (macOS) gespeichert werden. Beides sorgt bei jeder Abfrage der Passphrase dafür, dass diese vom Client automatisch angegeben wird, beim Mac beispielsweise unter Abruf der Face ID oder Touch ID.

Allerdings ist die Verwendung einer Passphrase nicht für die Nutzung in Skripten geeignet. Für den Einsatz in Skripten sollte auf eine Passphrase verzichtet werden. (Wer hier Rat weiß: Bitte gern Hinweise melden, wie sich eine Absicherung per Passphrase mit Skripten verwenden oder wie sich sonst eine Absicherung im Falle der Verwendung von SSH in Skripten erzielen lässt).

Dateiübertragung mit sftp

Auf die Fernsteuerung via SSH setzen auch Funktionen des Programms sftp (»Secure File Transfer«) für das sichere Übertragen von Dateien von einem Rechner zum anderen auf. Ist SSH wie zuvor beschrieben eingerichtet, genügt das Kommando

sftp mein-server

zur Verbindung des lokalen Rechners mit dem Rechner mein-server. Das Kommando

put /pfad/zur/quelldatei /pfad/zur/zieldatei

überträgt dann eine Datei von einem Pfad auf dem lokalen Rechner zu einem Pfad auf dem Zielrechner. Das funktioniert auch mit ganzen Ordnern und deren Inhalt.

Mit get anstelle von put können Dateien heruntergeladen werden. Während die Verbindung über sftp anliegt, gelingt die Navigation auf dem entfernten Rechner mit den Kommandos ls (list) und cd (change directory) sowie mit lls und lcd auf dem lokalen Rechner. Wie bei SSH trennt ein exit die Verbindung und beendet das Programm.

Synchronisierung mit rsync

Ein weiteres sehr verbreitet eingesetztes Programm ist rsync zur Synchronisierung von Datenbeständen [5]. Weniger bekannt ist, dass rsync auch über Rechnergrenzen hinweg eingesetzt werden kann. Hierfür wird im Kommando zum Aufruf von rsync den Parametern von Quelle und Ziel der Name des Rechners hinzugefügt. Ein Aufruf von beispielsweise

rsync -avz fred@example.com:/~ ~/data/bak/example-com

veranlasst den lokalen Rechner, den gesamten Inhalt des Verzeichnisses des Benutzers fred auf dem Rechner example.com mit dem Ordner data/bak/example-com im Benutzerverzeichnis des lokalen Rechners zu synchronisieren.

Die Verbindung zum entfernten Rechner und die Absicherung der Kommunikation per Verschlüsselung basiert dabei auf SSH und wird von rsync ohne Abfrage eines Kennwortes eingesetzt, sofern eine passende Konfiguration sowie ein Schlüssel hinterlegt und dessen Schloss auf dem Zielrechner eingebaut sind.

Zusammenfassung

Hier noch einmal eine Übersicht der in diesem Dokument betrachteten Befehle.

Einrichtung

Schlüssel und Schloss zur vereinfachten Anmeldung erzeugen
ssh-keygen -t rsa

Ablageort des Schlüssels für die vereinfachte Anmeldung an einem anderen Rechner
~/.ssh/id_rsa

Die lokale SSH-Konfiguration ändern
nano ~/.ssh/config

Schloss für SSH in Tür 22 von mein-server einbauen
ssh-copy-id fred@mein-server

Nutzung

Verbindung zur Fernbedienung von mein-server aufbauen
ssh mein-server

Verbindung zu mein-server herstellen um Dateien zu übertragen
sftp mein-server

Dateien oder Ordner hochladen
put /pfad/zur/quelldatei /pfad/zur/zieldatei

Dateien oder Ordner herunterladen
get /pfad/zur/quelldatei /pfad/zur/zieldatei

Die SSH- oder SFTP-Verbindung zu mein-server schließen
exit

Dateien mit example.com synchronisieren
rsync -avz fred@example.com:/~ ~/data/bak/example-com

Weitere Befehlsvarianten und ihre vollständige Dokumentation sind beispielsweise über das Wiki von Ubuntuusers zu finden [4].

Automatisierung

Die Synchronisierung von Dateien ist nur ein Bereich, von dem ausgehend sich auch eine Automatisierung herstellen lässt. Beispielsweise kann das dort beschriebene Kommando in einem Skript eingesetzt werden und vereinfacht die Synchronisierung, weil so nicht immer das längliche Kommando getippt werden muss.

Beispiel für ein einfaches Synchronisierungsskript
#!/bin/sh

rsync -avz fred@example.com:/~ ~/data/bak/example-com

Wird das obige Skript als Datei ~/bin/sync-example gespeichert, genügt zum Auslösen einer Synchronisierung das Kommando

~/bin/sync-example

Ebenso lässt sich dieser Aufruf der Synchronisierung beispielsweise zeitgesteuert ausführen. Dann muss lediglich der obige Skript-Aufruf als Kommando in die Crontab [6] des lokalen Rechners aufgenommen werden.

Es lassen sich zahllose Einsatzmöglichkeiten für eine Automatisierung denken, denen jeweils gemeinsam ist, dass sie mit Hilfe der hier beschriebenen Konfigurationen ohne die Abfrage eines Kennwortes über Rechnergrenzen hinweg ablaufen können.

Schlussbemerkungen

SSH ist ein mächtiges und elemantares Werkzeug für den Umgang mit mehreren Rechnern über Rechnergrenzen hinweg. Das Zusammenspiel von ssh mit sftp und rsync erhöhen die Leistungsfähigkeit beträchtlich.

Mit dem Einsatz der Public-Key-Authentifizierung können viele Rechner von einem einzelnen Gerät aus gleichzeitig bedient werden ohne dass Passwortabfragen die Bequemlichkeit oder die vielfältigen Möglichkeiten der Automatisierung stören.

SSH und die Kommandozeile machen für viele alltägliche Verrichtungen den Einsatz zusätzlicher Programme überflüssig. Eine Dokumentation wie diese lässt auch bei nur gelegentlicher Nutzung die wesentlichen Elemente der Verwendung von SSH überschaubar bleiben.

Änderungsverlauf

Version 1 vom 2. September 2025

Erste Fassung

Verweise