Definition

Secure Shell (SSH)

Was ist Secure Shell (SSH)?

SSH, auch bekannt als Secure Shell oder Secure Socket Shell, ist ein Netzwerkprotokoll, das Benutzern, insbesondere Systemadministratoren, eine sichere Möglichkeit bietet, über ein ungesichertes Netzwerk auf einen Computer zuzugreifen. Neben der Bereitstellung von sicheren Netzwerkdiensten bezieht sich SSH auf die Suite von Dienstprogrammen, die das SSH-Protokoll implementieren.

Secure Shell bietet eine starke Kennwortauthentifizierung, Authentifizierung mit öffentlichen Schlüsseln sowie eine verschlüsselte Datenkommunikation zwischen zwei Computern, die über ein offenes Netzwerk (wie das Internet) verbunden sind. SSH bietet nicht nur eine starke Verschlüsselung, sondern Netzwerkadministratoren verwenden es auch häufig für die Remote-Verwaltung von Systemen und Anwendungen, da sie sich damit über ein Netzwerk bei einem anderen Computer anmelden, Befehle ausführen und Dateien von einem Computer auf einen anderen verschieben können.

SSH bezieht sich sowohl auf das kryptografische Netzwerkprotokoll als auch auf die Suite von Dienstprogrammen, die dieses Protokoll implementieren. SSH verwendet das Client-Server-Modell und verbindet eine Secure Shell-Client-Anwendung, die als Endpunkt fungiert, an dem die Sitzung angezeigt wird, mit einem SSH-Server, an dem die Sitzung ausgeführt wird. SSH-Implementierungen umfassen häufig Unterstützung für Anwendungsprotokolle, die für die Terminalemulation oder Dateiübertragung verwendet werden. Mit SSH können Admins außerdem sichere Tunnel für andere Anwendungsprotokolle zu erstellen, zum Beispiel, um X-Window-System-Sitzungen sicher per Fernzugriff auszuführen. Ein SSH-Server ist standardmäßig auf dem Standard-TCP-Port 22 (Transmission Control Protocol) erreichbar.

Wie funktioniert SSH?

Secure Shell wurde entwickelt, um unsichere Terminalemulations- oder Anmeldeprogramme wie Telnet, rlogin (Remote-Login) und rsh (Remote-Shell) zu ersetzen. Daneben dient SSH auch anstelle von Dateiübertragungsprogramme, wie zum Beispiel File Transfer Protocol (FTP) und rcp (remote copy).

Die grundlegendste Verwendung von SSH ist die Verbindung zu einem entfernten Host für eine Terminalsitzung. Die Form dieses Befehls ist die folgende:

ssh [email protected]

Dieser Befehl veranlasst den Client, eine Verbindung zum Server mit dem Namen server.example.com unter Verwendung der Benutzerkennung herzustellen (hier ist UserName als Platzhalter gesetzt). Ist es die erste Verbindung zwischen dem lokalen Host und dem Server wird, wird der Benutzer aufgefordert, den öffentlichen Schlüssel des Remote-Hosts einzugeben und eine Verbindung herzustellen:

The authenticity of host 'sample.ssh.com' cannot be established.
 DSA key fingerprint is 01:23:45:67:89:ab:cd:ef:ff:fe:dc:ba:98:76:54:32:10.
 Are you sure you want to continue connecting (yes/no)?

Wenn Sie die Eingabeaufforderung mit Ja beantworten, wird die Sitzung fortgesetzt, und der Hostschlüssel wird in der Datei known_hosts des lokalen Systems gespeichert. Dies ist eine versteckte Datei, die standardmäßig in einem versteckten Verzeichnis namens /.ssh/known_hosts im Home-Verzeichnis des Benutzers gespeichert ist. Sobald der Host-Schlüssel in der Datei known_hosts gespeichert ist, kann sich das Client-System wieder direkt mit diesem Server verbinden, ohne dass irgendwelche Genehmigungen erforderlich sind; der Host-Schlüssel authentifiziert die Verbindung.

Wofür wird SSH verwendet?

SSH ist in allen Rechenzentren vorhanden und wird standardmäßig mit jedem Unix-, Linux- und Mac-Server ausgeliefert. SSH-Verbindungen sichern viele verschiedene Arten der Kommunikation zwischen einem lokalen Rechner und einem Remote-Host, einschließlich des sicheren Remote-Zugriffs auf Ressourcen, der Remote-Ausführung von Befehlen, der Bereitstellung von Software-Patches und -Updates sowie anderer Verwaltungs- oder Managementaufgaben. Neben der Schaffung eines sicheren Kanals zwischen lokalen und entfernten Computern wird SSH für die Verwaltung von Routern, Serverhardware, Virtualisierungsplattformen, Betriebssystemen (OS) und innerhalb von Systemverwaltungs- und Dateiübertragungsanwendungen verwendet.

Über SSH können sich Admins mit Servern verbinden, um Änderungen vorzunehmen, Uploads durchzuführen und zu beenden, entweder über Tools oder direkt über das Terminal. SSH-Schlüssel können eingesetzt werden, um den Zugriff auf Server zu automatisieren, und werden häufig in Skripten, Backup-Systemen und Konfigurationsmanagement-Tools verwendet. Der Vorteil dieser Schlüssel ist ihre Bequeme Nutzung und dass sie über Unternehmensgrenzen hinweg funktionieren. Mit ihrer Hilfe lässt sich auch Single Sign-On (SSO) umsetzen, sodass Benutzer zwischen ihren Konten wechseln können, ohne jedes Mal ein Passwort eingeben zu müssen.

SSH spielt zwar eine zentrale Rolle im Identitäts- und Zugriffsmanagement (Identity Access Management, IAM), leistet aber mehr als nur die Authentifizierung über eine verschlüsselte Verbindung. Der gesamte SSH-Verkehr ist verschlüsselt; ob Benutzer eine Datei übertragen, im Internet surfen oder einen Befehl ausführen, ihre Aktionen sind privat.

Es ist zwar möglich, SSH mit einer gewöhnlichen Benutzerkennung und einem Passwort als Anmeldeinformationen zu verwenden, häufiger ist aber der Einsatz öffentlicher Schlüsselpaare, um Hosts gegenseitig zu authentifizieren. Einzelne Benutzer müssen immer noch ihre Benutzer-ID und ihr Kennwort – oder andere Authentifizierungsmethoden – verwenden, um sich mit dem Remote-Host selbst zu verbinden, aber der lokale Rechner und der Remote-Rechner authentifizieren sich gegenseitig separat. Dazu generiert Secue Shell für jeden Host in der Kommunikation ein eindeutiges öffentliches Schlüsselpaar. Für eine einzelne Sitzung sind demnach zwei öffentliche Schlüsselpaare erforderlich: eines zur Authentifizierung des Remote-Rechners gegenüber dem lokalen Rechner und ein zweites zur Authentifizierung des lokalen Rechners gegenüber dem Remote-Rechner.

Die Geschichte von SSH

Die erste Version von SSH erschien 1995 und wurde von Tatu Ylönen in seiner Zeit an der Technischen Universität Helsinki entwickelt. Später gründete er SSH Communications Security, einen Anbieter von Cybersicherheitslösungen mit Sitz in Finnland. Im Laufe der Zeit wurden verschiedene Schwachstellen in SSH-1 gefunden, so dass diese Version heute als veraltet und nicht sicher in der Anwendung gilt.

SSH-2, die aktuelle Version der Secure Shell-Protokolle, wurde 2006 von der Internet Engineering Task Force (IETF) als Standardspezifikation angenommen. SSH-2 ist nicht mit SSH-1 kompatibel und verwendet einen Diffie-Hellman-Schlüsselaustausch sowie eine stärkere Integritätsprüfung, die zur Verbesserung der Sicherheit Nachrichtenauthentifizierungscodes verwendet. SSH-Clients und -Server können eine Reihe von Verschlüsselungsmethoden verwenden, wobei die am weitesten verbreiteten der Advanced Encryption Standard (AES) und Blowfish sind.

Bislang sind keine ausnutzbaren Schwachstellen in SSH-2 bekannt, obwohl Informationen, die Edward Snowden 2013 durchsickern ließ, darauf hindeuten, dass die National Security Agency (NSA) möglicherweise in der Lage ist, einen Teil des SSH-Datenverkehrs zu entschlüsseln.

Secure-Shell-Sicherheitsprobleme

Unternehmen, die SSH verwenden, sollten nach Möglichkeiten suchen, die auf Client-Systemen gespeicherten Host-Schlüssel zu verwalten. Diese Schlüssel können sich im Laufe der Zeit ansammeln, insbesondere bei IT-Mitarbeitern, die zu Verwaltungszwecken auf Remote-Hosts zugreifen müssen. Da die in einer SSH known_hosts-Datei gespeicherten Daten verwendet werden können, um authentifizierten Remote-Zugriff auf Systeme zu erhalten, sollten sich Unternehmen der Existenz dieser Dateien bewusst sein und einen Standardprozess implementieren, um die Kontrolle über die Dateien zu behalten, selbst nachdem ein System außer Betrieb genommen wurde, da die Festplatten diese Daten möglicherweise im Klartext gespeichert haben.

Entwickler sollten auch vorsichtig sein, wenn sie SSH-Befehle oder -Funktionen in ein Skript oder eine andere Art von Programm einbinden. Es ist zwar möglich, einen SSH-Befehl zu geben, der eine Benutzer-ID und ein Kennwort enthält, um den Benutzer des lokalen Rechners gegenüber einem Konto auf dem Remote-Host zu authentifizieren, doch kann dies dazu führen, dass ein Angreifer, der sich Zugriff auf den Quellcode verschafft, die Anmeldedaten erfährt.

ShellShock, eine Sicherheitslücke im Bash-Befehlsprozessor, kann über SSH ausgenutzt werden, ist aber eine Schwachstelle in Bash, nicht in SSH. Die größte Bedrohung für SSH ist eine nachlässige Schlüsselverwaltung. Ohne das ordnungsgemäße, zentrale Erstellen, Rotieren und Entfernen von SSH-Schlüsseln können Unternehmen den Überblick verlieren, wer wann auf welche Ressourcen zugreifen kann, insbesondere wenn SSH in automatisierten Prozessen zwischen Anwendungen eingesetzt wird.

SSH versus Telnet

Telnet war eines der ersten Internetanwendungsprotokolle – das andere ist FTP – und wird zum Initiieren und Aufrechterhalten einer Terminalemulationssitzung auf einem Remote-Host verwendet.

SSH und Telnet sind funktional ähnlich. Der Hauptunterschied besteht darin, dass das SSH-Protokoll Public-Key-Kryptografie zum Authentifizieren von Endpunkten beim Aufbau einer Terminalsitzung sowie zum Verschlüsseln von Sitzungsbefehlen und -ausgaben verwendet.

SSH eignet sich genau wie Telnet für die Terminalemulation, aber zusätzlich auch für das Ausgeben von Befehlen aus der Ferne wie mit rsh, die Übertragung von Dateien mit dem SSH File Transfer Protocol (SFTP) und das Tunneln anderer Anwendungen.

SSH versus SSL und TLS

Das TLS-Protokoll (Transport Layer Security), die Nachfolgerversion des SSL-Protokolls (Secure Sockets Layer), wurde entwickelt, um Sicherheit für Netzwerkübertragungen auf der Transportschicht zu bieten. Das SSH-Protokoll arbeitet ebenfalls auf oder knapp oberhalb der Transportschicht, aber es gibt wichtige Unterschiede zwischen den beiden Protokollen.

Während beide auf öffentlich oder private Schlüsselpaare zur Authentifizierung von Hosts setzen, wird bei TLS nur der Server mit einem Schlüsselpaar authentifiziert. SSH setzt ein separates Schlüsselpaar zur Authentifizierung jeder Verbindung ein: ein Schlüsselpaar für eine Verbindung von einem lokalen Rechner zu einem entfernten Rechner und ein zweites Schlüsselpaar zur Authentifizierung der Verbindung vom entfernten Rechner zum lokalen Rechner.

Ein weiterer Unterschied zwischen SSH und TLS besteht darin, dass mit TLS Verbindungen ohne Authentifizierung verschlüsselt oder ohne Verschlüsselung authentifiziert werden können; mit SSH werden alle Verbindungen verschlüsselt und authentifiziert.

SSH bietet IT- und Informationssicherheitsexperten (Infosec) einen sicheren Mechanismus zur Verwaltung von SSH-Clients aus der Ferne. Anstatt eine Passwortauthentifizierung zu verlangen, um eine Verbindung zwischen einem SSH-Client und einem Server zu initialisieren, authentifiziert SSH die Geräte selbst. Auf diese Weise kann das IT-Personal eine Verbindung zu entfernten Systemen herstellen und SSH-Konfigurationen ändern, einschließlich des Hinzufügens oder Entfernens von Host-Schlüsselpaaren in der Datei known_hosts.

SSH-Implementierungen

Als offenes Protokoll ist SSH mit den meisten Computerplattformen kompatibel, und die Open-Source-Implementierung OpenSSH ist diejenige, die man am häufigsten unter Linux, Unix und anderen Betriebssystemen findet, die auf der Berkeley Software Distribution (BSD) basieren, einschließlich Apples macOS.

OpenSSH wurde ab 2015 für die Ausführung in Windows PowerShell portiert, und 2018 wurde die optionale OpenSSH-Unterstützung zu Windows 10 hinzugefügt. Während SSH in den meisten Unix-ähnlichen Betriebssystemen standardmäßig direkt zugänglich ist, muss die von Microsoft portierte Version von OpenSSH explizit in der Windows-Einstellungs-App aktiviert werden.

PuTTY ist eine weitere Open-Source-Implementierung von SSH. Es wurde ursprünglich für Windows geschrieben, ist aber inzwischen auch für Linux, Unix und macOS vergübar. PuTTY ist eine häufige Wahl für den Einsatz von SSH auf einem Windows-System.

Die meisten Implementierungen der SSH-Suite umfassen drei Dienstprogramme: slogin (sichere Anmeldung), ssh und scp (sichere Kopie).

Derzeit gibt es Dutzende von SSH-Implementierungen für verschiedene Plattformen und unter einer Vielzahl von Open-Source- und proprietären Lizenzen.

SSH-Befehle

Obwohl es grafische Implementierungen von SSH gibt, wird das Programm normalerweise über die Befehlszeile (CLI, Command Line Interface) aufgerufen oder als Teil eines Skripts ausgeführt. Wenn Sie den ssh-Befehl allein ausführen, ohne Argumente wie einen Zielhost oder eine Benutzerkennung, erhalten Sie eine Liste mit SSH-Befehlsparametern und Optionen.

Mit dem nachfolgenden, einfachen SSH-Befehl können Nutzer zum Beispiel das Programm und den Namen des Zielhosts oder die IP-Adresse (Internet Protocol) aufrufen:

ssh server.beispiel.org

Der Befehl stellt eine Verbindung zum Ziel, server.example.org, her; der Zielhost antwortet mit einer Aufforderung zur Eingabe eines Passworts für die Benutzer-ID des Kontos, unter dem der Client läuft. Mit anderen Worten: Lautet die verwendete Benutzer-ID jsmith, fragt der Remote-Host nach einem Kennwort, das dem Konto jsmith auf dem Remote-Host zugeordnet ist. In vielen Fällen wird die Benutzer-ID für den Remote-Host eine andere sein. In diesem Fall sollte der Befehl mit der Benutzer-ID des Remote-Hosts eingegeben werden, etwa so:

ssh [email protected]

Nutzer können SSH kann auch von der Befehlszeile verwenden, um einen einzelnen Befehl auf dem Remote-Host auszuführen und dann zu beenden, zum Beispiel:

ssh example.org ls

Dieser Befehl führt den Unix-Befehl ls aus, der alle Inhalte des aktuellen Verzeichnisses auf dem Remote-Host auflistet. Für Administratoren gibt es interessantere Befehle, um sie auf einem entfernten Host auszuführen. So können sie beispielsweise eine Serverinstanz initialisieren, die einem entfernten Rechnerrugriff auf eine einzelne Datei – oder eine andere Ressource – gewährt, und dann den Server beendet, nachdem der angegebene entfernte Host auf die Datei zugegriffen hat.

Neben der ausführbaren Datei ssh verfügt SSH über weitere ausführbare Befehle, die in der Befehlszeile zusätzliche Funktionen erfüllen, darunter die folgenden:

  • sshd initiiert den SSH-Server, der auf eingehende SSH-Verbindungsanfragen wartet und autorisierten Systemen die Verbindung zum lokalen Host ermöglicht.
  • ssh-keygen ist ein Programm zum Erstellen eines neuen Authentifizierungsschlüsselpaars für SSH, das zur Automatisierung von Anmeldungen, zur Implementierung von SSO und zur Authentifizierung von Hosts verwendet werden kann.
  • ssh-copy-id ist ein Programm zum Kopieren, Installieren und Konfigurieren eines SSH-Schlüssels auf einem Server, um passwortlose Anmeldungen und SSO zu automatisieren.
  • ssh-agent ist ein Hilfsprogramm, das Identitätsschlüssel und ihre Passphrasen – aus denen SSH einen Verschlüsselungsschlüssel ableitet – verfolgt und es dem Benutzer ermöglicht, die Identitätsschlüssel zu verwenden, um sich bei verschiedenen Servern anzumelden, ohne Passwörter oder Passphrasen erneut eingeben zu müssen.
  • ssh-add wird verwendet, um einen Schlüssel zum SSH-Authentifizierungsagenten hinzuzufügen und wird zusammen mit ssh-agent verwendet, um SSO mit SSH zu implementieren.
  • scp ist ein Programm zum Kopieren von Dateien von einem Computer auf einen anderen und ist eine SSH-gesicherte Version von rcp.
  • sftp ist ein Programm zum Kopieren von Dateien von einem Computer zu einem anderen und ist eine SSH-gesicherte Version von ftp, dem ursprünglichen File Transfer Protocol. SFTP ist zum bevorzugten Mechanismus für den Dateiaustausch über das Internet geworden und hat sowohl FTP als auch FTP/S (FTP Secure), ein Protokoll zur Verwendung von FTP über einen SSL/TLS-Tunnel, ersetzt.

SSH-Tunneling

SSH-Tunneling, auch bekannt als SSH-Port-Weiterleitung, ist eine Technik, die es einem Benutzer ermöglicht, einen sicheren Tunnel zwischen einem lokalen Host und einem Remote-Host zu öffnen.

SSH-Port-Weiterleitung ist eine Technik zur Umleitung des Netzwerkverkehrs an eine bestimmte Port/IP-Adresse, so dass ein Remote-Host für Anwendungen auf dem lokalen Host direkt erreichbar ist. Das Ziel kann auf dem entfernten SSH-Server liegen, oder dieser Server kann so konfiguriert sein, dass er an einen anderen entfernten Host weiterleitet.

SSH-Tunnel sind sowohl für IT-Administratoren als auch für böswillige Akteure ein mächtiges Werkzeug, da sie eine Unternehmensfirewall unbemerkt passieren können. Daher gibt es Tools, die die unbefugte Nutzung von SSH-Tunneln durch eine Unternehmensfirewall verhindern.

Diese Definition wurde zuletzt im April 2024 aktualisiert

Erfahren Sie mehr über Anwendungs- und Plattformsicherheit