Die Abkürzung SSH steht für "Secure Shell" und bezeichnet sowohl das Protokoll als auch das Programm selbst. Auf vielen Plattformen, darunter auch Linux, bietet die vom OpenBSD-Projekt entwickelte Programmsammlung OpenSSH [1] alles, was Sie für die verschlüsselten Verbindungen benötigen: Kommandozeilentools zum Arbeiten auf entfernten Rechnern, die Möglichkeit, Programme remote auszuführen (auch grafisch, mittels X11-Weiterleitung), andere Internetdienste über SSH zu "tunneln" (und damit gegen Lauschangriffe abzusichern), Tools zum sicheren Kopieren von Daten und vieles mehr. Die Tabelle "OpenSSH-Suite" zeigt eine Übersicht der wichtigen Anwendungen.
Die Installation gestaltet sich unproblematisch, denn OpenSSH zählt zu den festen Bestandteilen jeder aktueller Linux-Distribution. Die meisten Systeme bieten für den Client und den Server zwei verschiedene Pakete an. Während der Client meistens vorinstalliert ist, müssen Sie den Server oft nachträglich einrichten, falls Sie von anderen Rechnern aus auf Ihren Linux-Computer per SSH zugreifen möchten. Eine Suche im Paketmanager nach openssh hilft in der Regel weiter.
Das grundlegende Arbeiten mit ssh und scp sowie das Erstellen von SSH-Schlüsseln und erste Schritte mit dem SSH-Agenten zeigt ein älterer Artikel [2]. Diese Folge geht einen Schritt weiter und verrät, was es mit Hostkeys auf sich hat und wie Sie den Fingerabdruck dieser Schlüssel prüfen, wie Sie private Schlüssel mit dem SSH-Agent (auch zeitlich begrenzt) verwalten, wie Sie mit dem eingebauten SOCKS-Proxy SSH-Verbindungen tunneln und wie Sie mit Secure FTP interaktiv Daten übertragen.
OpenSSH-Suite
| Programm | Funktion |
|---|---|
ssh
|
Der Kommandozeilenclient ssh baut verschlüsselte Verbindungen zu entfernten Rechnern auf und führt auf Wunsch auch direkt Befehle aus.
|
scp
|
Mit scp ("secure copy") kopieren Sie Dateien (nicht-interaktiv) lokal, zu oder von entfernten Rechnern.
|
sftp
|
Der FTP-Client ("secure FTP") ermöglicht interaktive Kopieraktionen: Wie bei anderen Kommandozeilen-FTP-Clients stehen neben Kopierfunktionen zahlreiche weitere Möglichkeiten zur Verfügung, wie Verzeichniswechsel und -listings, Änderung von Zugriffsrechten, Löschen von Verzeichnissen oder Dateien und vieles mehr. |
sshd
|
Der SSH-Server sshd ist als Daemon implementiert und lauscht standardmäßig auf Port 22. Die SSH-Clients bauen Verbindungen mit dem sshd auf.
|
ssh-keygen
|
Das Tool erstellt und konvertiert SSH-Schlüssel. |
ssh-keysign
|
Hilfsprogramm, das bei der Host-basierten Authentifizierung zum Einsatz kommt. |
ssh-keyscan
|
Mit dieser Anwendung zeigen Sie öffentliche Hostkeys an und hängen sie an die Datei ~/.ssh/known_hosts an.
|
ssh-agent
|
Der SSH-Agent verwaltet private SSH-Schlüssel und vereinfacht den Umgang mit Passwörtern. |
ssh-add
|
Das Tool macht den ssh-agent mit neuen Schlüsseln bekannt.
|
Ein Schlüsselerlebnis: Der Hostkey
Beim Erstkontakt verrät die Gegenseite den Fingerabdruck ihres öffentlichen Hostkeys (Abbildung 1). Die Warnung, dass die Authentizität des Rechners nicht gesichert sei, müssen Sie explizit durch Eingabe von yes bestätigen. Erst danach geht's weiter, und die Gegenstelle fordert das Passwort an.
Die Hostkeys des fremden Systems landen in der Datei ~/.ssh/known_hosts. Sobald Sie sich erneut auf dem Rechner einloggen, prüft SSH, ob der Schlüssel noch stimmt, und verweigert die Zusammenarbeit, wenn das nicht der Fall ist: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!. In einem solchen Fall kann es sich um böswillige Absicht und einen so genannten Man-in-the-middle-Angriff handeln; ein nicht mehr passender Hostkey hat aber oft ganz harmlose Gründe: Der Administrator hat den Schlüssel geändert oder das System neu installiert. Sind Sie sich sicher, dass das der Fall ist, greifen Sie zum Texteditor, öffnen die Datei ~/.ssh/known_hosts und löschen den entsprechenden Eintrag.
Im Verzeichnis /etc/ssh finden Sie sowohl den privaten als auch den öffentlichen Hostkey. Hat ein Administrator den Fingerabdruck des öffentlichen Schlüssels (/etc/ssh/ssh_host_rsa_key.pub) vorher bekannt gemacht, können Sie ihn beim Erstkontakt vor dem Akzeptieren überprüfen. Bei der Bestimmung des Fingerabdrucks hilft das Tool ssh-keygen. Mit der Option -l zeigen Sie den Fingerabdruck eines öffentlichen Schlüssels an, den Sie auf Anforderung angeben. Möchte der Administrator des Rechners macnugget, auf dem sich petronella von samesame aus einloggen möchte (Abbildung 1), den Fingerabdruck des Hostkeys herausfinden, geht er so vor, wie in Listing 1.
# ssh-keygen -l Enter file in which the key is (/root/.ssh/id_rsa): /etc/ssh/ssh_host_rsa_key 2048 a0:0a:aa:3b:d3:08:f1:90:45:4f:48:c9:f6:cb:92:37 /etc/ssh/ssh_host_rsa_key.pub
Agent X is watching you
Der Artikel unter [2] beschreibt ausführlich, wie Sie einen SSH-Schlüssel anlegen und damit unter anderem eine Authentifizierung ohne Passworteingabe ermöglichen. Die gesparte Tipparbeit erkaufen Sie aber unter Umständen teuer: Der lokale, private Schlüssel bleibt ungesichert und öffnet einem Angreifer Tür und Tor, falls er in die falschen Hände gerät. Einen gesunden Mittelweg beschreitet das Programm ssh-agent: Es übernimmt die Verwaltung privater Schlüssel. So müssen Sie das Kennwort nur noch einmal pro Schlüssel zu Beginn einer ssh-agent-Sitzung eingeben.
Der Agent ist vielseitig: Er verrichtet entweder als Daemon im Hintergrund seine Arbeit oder lässt sich gezielt zum Aufruf einzelner Programme verwenden. Als zusätzliches Sicherheitsfeature lässt sich für den ssh-agent in beiden Anwendungsfällen mit der Option -t ein Timer einschalten. Nach dem Ablauf einer so festgelegten Zeitspanne "vergisst" der Agent die gespeicherten Schlüsselkennwörter. Hinter dem Parameter -t geben Sie die Lebensdauer der Passwörter an. ssh-agent versteht die verschiedensten Einheiten: Keine Angabe oder s bedeutet Sekunden, m Minuten, h Stunden, d Tage und w Wochen.
Um den Agenten als unabhängigen Daemon zu starten und ihn so zu konfigurieren, dass er neu hinzugefügte Schlüssel jeweils nach zwei Tagen vergisst, lautet der Aufruf beispielsweise:
$ ssh-agent -t 2d
Die Ausgabe verrät, auf welche Werte Sie die Umgebungsvariablen $SSH_AUTH_SOCK und $SSH_AGENT_PID setzen müssen, damit ssh-agent korrekt arbeitet. Kopieren Sie die Programmausgabe entweder mit der Maus und fügen sie ein, oder lassen Sie die Ausgabe direkt beim Start durch eval auswerten:
$ eval $(ssh-agent -t 2d)
Beim Start verrät das Programm weiterhin direkt seine Prozess-ID, was der nachfolgende ps-Aufruf bestätigt (Abbildung 2). Der Agent quittiert nicht von selbst seinen Dienst – auch nicht, wenn Sie die Shell schließen. Um das Programm zu beenden, rufen Sie in der Shell, in der ssh-agent gestartet wurde, ssh-agent -k auf. Ist das nicht möglich, etwa, weil die aufrufende Shell schon nicht mehr läuft, bleibt als einziger Ausweg das kill-Kommando [3], zum Beispiel:
$ kill 29692
Um den ssh-agent nicht als Daemon, sondern gezielt mit einer Anwendung (beispielsweise einem Terminalprogramm) zu starten, geben Sie den Namen der ausführbaren Datei im Aufruf mit an:
$ ssh-agent gnome-terminal &
Damit steht der Agent nur für diese Anwendung und die aus ihr heraus gestarteten Programme zur Verfügung. Beenden Sie das Terminal, stellt das auch das Aus für ssh-agent und alle darin enthaltenen Schlüsselinformationen dar.
Achtung: Einige Distributionen, darunter aktuelle Debian-Versionen, starten das Programm ssh-agent zusammen mit der X-Umgebung. Am besten überprüfen Sie dies mit dem in Abbildung 2 gezeigten ps/grep-Aufruf. Lädt der Benutzer in dieser Konfiguration Schlüssel ohne zeitliche Begrenzung in den Agenten (siehe nächster Abschnitt) und vergisst, den Bildschirm zu sperren, wenn er den Rechner kurz verlässt, kann das zu einem potenziellen Sicherheitsrisiko werden. Um dem System dieses Verhalten abzugewöhnen, passen Sie die Datei /etc/X11/Xsession.options an und kommentieren die Zeile
use-ssh-agent
durch ein vorangestelltes Rautezeichen (#) aus.


