Was ist SSH

SSH, oder Secure Shell, ist ein Fernverwaltungsprotokoll, mit dem Benutzer ihre entfernten Server über das Internet steuern und ändern können. Der Dienst wurde als sicherer Ersatz für das unverschlüsselte Telnet geschaffen und verwendet kryptografische Techniken, um sicherzustellen, dass die gesamte Kommunikation zum und vom Remote-Server verschlüsselt erfolgt. Er bietet einen Mechanismus zur Authentifizierung eines Remote-Benutzers, zur Übertragung von Eingaben vom Client an den Host und zur Weiterleitung der Ausgabe zurück an den Client.

Die Abbildung unten zeigt ein typisches SSH-Fenster. Jeder Linux- oder macOS-Benutzer kann sich direkt aus dem Terminalfenster heraus per SSH mit dem Remote-Server verbinden. Windows-Benutzer können die Vorteile von SSH-Clients wie Putty nutzen. Sie können Shell-Befehle auf die gleiche Weise ausführen, als würden Sie den entfernten Computer physisch bedienen.

Dieses SSH-Tutorial behandelt die Grundlagen der Funktionsweise von ssh sowie die zugrunde liegenden Technologien, die das Protokoll verwendet, um eine sichere Methode für den Fernzugriff zu bieten. Es werden die verschiedenen Verschlüsselungsebenen und -typen sowie der Zweck jeder Ebene behandelt.

Holen Sie sich Ihr Linux VPS Hosting bei Hostinger. Holen Sie sich bis zu 77% Rabatt!

Hier geht’s los

Wie funktioniert SSH

Wenn Sie Linux oder Mac verwenden, dann ist die Verwendung von SSH sehr einfach. Wenn Sie Windows verwenden, müssen Sie einen SSH-Client verwenden, um SSH-Verbindungen zu öffnen. Der populärste SSH-Client ist PuTTY, über den Sie hier mehr erfahren können.

Für Mac- und Linux-Benutzer gehen Sie zu Ihrem Terminalprogramm und befolgen Sie dann die folgende Prozedur:

Der SSH-Befehl besteht aus drei verschiedenen Teilen:

ssh {user}@{host}

Der SSH-Schlüssel-Befehl weist Ihr System an, dass Sie eine verschlüsselte Secure Shell-Verbindung öffnen wollen. {user} steht für das Konto, auf das Sie zugreifen möchten. Sie können zum Beispiel auf den Benutzer root zugreifen, was im Grunde ein Synonym für Systemadministrator ist, der alle Rechte hat, um alles auf dem System zu ändern. {host} verweist auf den Computer, auf den Sie zugreifen möchten. Dies kann eine IP-Adresse (z. B. 244.235.23.19) oder ein Domänenname (z. B. www.xyzdomain.com) sein.

Wenn Sie die Eingabetaste drücken, werden Sie aufgefordert, das Passwort für das gewünschte Konto einzugeben. Wenn Sie es eintippen, erscheint nichts auf dem Bildschirm, aber Ihr Passwort wird tatsächlich übertragen. Wenn Sie mit der Eingabe fertig sind, drücken Sie noch einmal die Eingabetaste. Wenn Ihr Kennwort korrekt ist, wird Ihnen ein Remote-Terminal-Fenster angezeigt.

Wenn Sie weitere SSH-Befehle kennenlernen möchten, finden Sie sie hier.

Unterschiedliche Verschlüsselungstechniken verstehen

Der wesentliche Vorteil von SSH gegenüber seinen Vorgängern ist die Verwendung von Verschlüsselung, um eine sichere Übertragung von Informationen zwischen dem Host und dem Client zu gewährleisten. Mit Host ist der Remote-Server gemeint, auf den Sie zugreifen wollen, während der Client der Computer ist, mit dem Sie auf den Host zugreifen. Es gibt drei verschiedene Verschlüsselungstechnologien, die von SSH verwendet werden:

  1. Symmetrische Verschlüsselung
  2. Asymmetrische Verschlüsselung
  3. Hashing.

Symmetrische Verschlüsselung

Symmetrische Verschlüsselung ist eine Form der Verschlüsselung, bei der ein geheimer Schlüssel sowohl für die Verschlüsselung als auch für die Entschlüsselung einer Nachricht durch den Client und den Host verwendet wird. Effektiv kann jeder, der den Schlüssel besitzt, die zu übertragende Nachricht entschlüsseln.

Symmetrische Verschlüsselung wird oft als Shared-Key- oder Shared-Secret-Verschlüsselung bezeichnet. In der Regel wird nur ein Schlüssel verwendet, manchmal auch ein Schlüsselpaar, bei dem der eine Schlüssel mit Hilfe des anderen Schlüssels leicht berechnet werden kann.

Symmetrische Schlüssel werden verwendet, um die gesamte Kommunikation während einer SSH-Sitzung zu verschlüsseln. Sowohl der Client als auch der Server leiten den geheimen Schlüssel anhand einer vereinbarten Methode ab, und der daraus resultierende Schlüssel wird niemals an Dritte weitergegeben. Der Prozess der Erzeugung eines symmetrischen Schlüssels wird durch einen Schlüsselaustauschalgorithmus durchgeführt. Was diesen Algorithmus besonders sicher macht, ist die Tatsache, dass der Schlüssel nie zwischen dem Client und dem Host übertragen wird. Stattdessen tauschen die beiden Rechner öffentliche Daten aus und manipulieren diese dann, um unabhängig voneinander den geheimen Schlüssel zu berechnen. Selbst wenn ein anderer Rechner die öffentlich freigegebenen Daten abfängt, kann er den Schlüssel nicht berechnen, da der Algorithmus für den Schlüsselaustausch nicht bekannt ist.

Es ist jedoch zu beachten, dass das geheime Token für jede SSH-Sitzung spezifisch ist und vor der Client-Authentifizierung erzeugt wird. Sobald der Schlüssel generiert wurde, müssen alle Pakete, die sich zwischen den beiden Rechnern bewegen, mit dem privaten Schlüssel verschlüsselt werden. Dazu gehört auch das Passwort, das der Benutzer in die Konsole eingibt, so dass die Anmeldeinformationen immer vor Netzwerk-Paket-Sniffern geschützt sind.

Es gibt eine Reihe von symmetrischen Verschlüsselungscodes, einschließlich, aber nicht beschränkt auf, AES (Advanced Encryption Standard), CAST128, Blowfish usw. Bevor eine gesicherte Verbindung aufgebaut wird, entscheiden der Client und ein Host über die zu verwendende Chiffre, indem sie eine Liste der unterstützten Chiffren in der Reihenfolge ihrer Präferenz veröffentlichen. Die bevorzugte Chiffre aus der Liste der vom Client unterstützten Chiffren, die auf der Liste des Hosts vorhanden ist, wird als bidirektionale Chiffre verwendet.

Wenn beispielsweise zwei Ubuntu 14.04 LTS-Rechner über SSH miteinander kommunizieren, verwenden sie aes128-ctr als Standardchiffre.

Asymmetrische Verschlüsselung

Im Gegensatz zur symmetrischen Verschlüsselung werden bei der asymmetrischen Verschlüsselung zwei separate Schlüssel für die Ver- und Entschlüsselung verwendet. Diese beiden Schlüssel werden als öffentlicher Schlüssel und als privater Schlüssel bezeichnet. Zusammen bilden diese beiden Schlüssel ein öffentlich-privates Schlüsselpaar.

Der öffentliche Schlüssel wird, wie der Name schon sagt, offen verteilt und mit allen Parteien geteilt. Während er funktional eng mit dem privaten Schlüssel verknüpft ist, kann der private Schlüssel nicht mathematisch aus dem öffentlichen Schlüssel berechnet werden. Die Beziehung zwischen den beiden Schlüsseln ist sehr komplex: Eine Nachricht, die mit dem öffentlichen Schlüssel eines Rechners verschlüsselt wird, kann nur mit dem privaten Schlüssel desselben Rechners entschlüsselt werden. Diese einseitige Beziehung bedeutet, dass der öffentliche Schlüssel weder seine eigenen Nachrichten entschlüsseln kann, noch kann er etwas entschlüsseln, das mit dem privaten Schlüssel verschlüsselt wurde.

Der private Schlüssel muss privat bleiben, d.h. damit die Verbindung sicher ist, darf kein Dritter ihn jemals kennen. Die Stärke der gesamten Verbindung liegt darin, dass der private Schlüssel niemals preisgegeben wird, da er die einzige Komponente ist, die in der Lage ist, Nachrichten zu entschlüsseln, die mit ihrem eigenen öffentlichen Schlüssel verschlüsselt wurden. Daher muss jede Partei, die in der Lage ist, öffentlich signierte Nachrichten zu entschlüsseln, den entsprechenden privaten Schlüssel besitzen.

Im Gegensatz zur allgemeinen Wahrnehmung wird die asymmetrische Verschlüsselung nicht zur Verschlüsselung der gesamten SSH-Sitzung verwendet. Stattdessen wird sie nur während des Schlüsselaustauschalgorithmus der symmetrischen Verschlüsselung verwendet. Bevor eine gesicherte Verbindung initiiert wird, generieren beide Parteien temporäre öffentlich-private Schlüsselpaare und tauschen ihre jeweiligen privaten Schlüssel aus, um den gemeinsamen geheimen Schlüssel zu erzeugen.

Wenn eine gesicherte symmetrische Kommunikation aufgebaut ist, verwendet der Server den öffentlichen Schlüssel des Clients, um eine Challenge zu generieren und an den Client zur Authentifizierung zu übermitteln. Wenn der Client die Nachricht erfolgreich entschlüsseln kann, bedeutet dies, dass er den für die Verbindung erforderlichen privaten Schlüssel besitzt. Die SSH-Sitzung beginnt dann.

Hashing

Einweg-Hashing ist eine weitere Form der Kryptografie, die bei Secure Shell-Verbindungen verwendet wird. Einweg-Hash-Funktionen unterscheiden sich von den beiden oben genannten Formen der Verschlüsselung in dem Sinne, dass sie niemals entschlüsselt werden sollen. Sie erzeugen für jede Eingabe einen eindeutigen Wert fester Länge, der keine eindeutige Tendenz aufweist, die ausgenutzt werden kann. Das macht es praktisch unmöglich, sie umzukehren.

Es ist einfach, einen kryptografischen Hash aus einer gegebenen Eingabe zu generieren, aber unmöglich, die Eingabe aus dem Hash zu generieren. Das bedeutet, dass ein Client, wenn er die richtige Eingabe besitzt, den kryptografischen Hash generieren und dessen Wert vergleichen kann, um zu überprüfen, ob er die richtige Eingabe besitzt.

SSH verwendet Hashes, um die Authentizität von Nachrichten zu überprüfen. Dies geschieht über HMACs, also Hash-based Message Authentication Codes. Damit wird sichergestellt, dass der empfangene Befehl in keiner Weise manipuliert wurde.

Bei der Auswahl des symmetrischen Verschlüsselungsalgorithmus wird auch ein geeigneter Algorithmus zur Nachrichtenauthentifizierung ausgewählt. Dies funktioniert ähnlich wie die Auswahl der Chiffre, wie im Abschnitt zur symmetrischen Verschlüsselung erläutert.

Jede Nachricht, die übertragen wird, muss eine MAC enthalten, die aus dem symmetrischen Schlüssel, der Paketfolgenummer und dem Nachrichteninhalt berechnet wird. Er wird außerhalb der symmetrisch verschlüsselten Daten als abschließender Teil des Kommunikationspakets gesendet.

Wie funktioniert SSH mit diesen Verschlüsselungstechniken

Die Funktionsweise von SSH basiert auf einem Client-Server-Modell, das die Authentifizierung zweier entfernter Systeme und die Verschlüsselung der zwischen ihnen übertragenen Daten ermöglicht.

SSH arbeitet standardmäßig auf TCP-Port 22 (dieser kann jedoch bei Bedarf geändert werden). Der Host (Server) lauscht auf Port 22 (oder einem anderen SSH zugewiesenen Port) auf eingehende Verbindungen. Er organisiert die sichere Verbindung, indem er den Client authentifiziert und bei erfolgreicher Überprüfung die korrekte Shell-Umgebung öffnet.

Der Client muss die SSH-Verbindung beginnen, indem er den TCP-Handshake mit dem Server initiiert, eine gesicherte symmetrische Verbindung sicherstellt, überprüft, ob die vom Server angezeigte Identität mit früheren Aufzeichnungen übereinstimmt (typischerweise in einer RSA-Schlüsselspeicherdatei aufgezeichnet), und die erforderlichen Benutzeranmeldeinformationen zur Authentifizierung der Verbindung vorlegt.

Der Aufbau einer Verbindung erfolgt in zwei Schritten: Zunächst müssen sich beide Systeme auf Verschlüsselungsstandards einigen, um die zukünftige Kommunikation zu schützen, und anschließend muss sich der Benutzer authentifizieren. Wenn die Anmeldeinformationen übereinstimmen, wird dem Benutzer der Zugriff gewährt.

Session Encryption Negotiation

Wenn ein Client versucht, sich über TCP mit dem Server zu verbinden, präsentiert der Server die Verschlüsselungsprotokolle und die jeweiligen Versionen, die er unterstützt. Wenn der Client ein ähnlich passendes Paar aus Protokoll und Version hat, wird eine Vereinbarung getroffen und die Verbindung mit dem akzeptierten Protokoll gestartet. Der Server verwendet außerdem einen asymmetrischen öffentlichen Schlüssel, mit dem der Client die Authentizität des Hosts überprüfen kann.

Ist dies geschehen, verwenden die beiden Parteien einen so genannten Diffie-Hellman-Schlüsselaustauschalgorithmus, um einen symmetrischen Schlüssel zu erzeugen. Dieser Algorithmus ermöglicht es sowohl dem Client als auch dem Server, zu einem gemeinsamen Schlüssel zu gelangen, der fortan zur Verschlüsselung der gesamten Kommunikationssitzung verwendet wird.

Der Algorithmus funktioniert auf einer sehr grundlegenden Ebene folgendermaßen:

  1. Beide, der Client und der Server, einigen sich auf eine sehr große Primzahl, die natürlich keinen gemeinsamen Faktor hat. Dieser Primzahlwert wird auch als Seed-Wert bezeichnet.
  2. Als Nächstes einigen sich die beiden Parteien auf einen gemeinsamen Verschlüsselungsmechanismus, um durch Manipulation der Seed-Werte in einer bestimmten algorithmischen Weise einen weiteren Satz von Werten zu erzeugen. Diese Mechanismen, die auch als Verschlüsselungsgeneratoren bezeichnet werden, führen große Operationen auf dem Seed-Wert durch. Ein Beispiel für einen solchen Generator ist AES (Advanced Encryption Standard).
  3. Beide Parteien erzeugen unabhängig voneinander eine weitere Primzahl. Diese wird als geheimer privater Schlüssel für die Interaktion verwendet.
  4. Dieser neu generierte private Schlüssel wird zusammen mit der gemeinsam genutzten Zahl und dem Verschlüsselungsalgorithmus (z. B. AES) verwendet, um einen öffentlichen Schlüssel zu berechnen, der an den anderen Computer verteilt wird.
  5. Die Parteien verwenden dann ihren persönlichen privaten Schlüssel, den gemeinsam genutzten öffentlichen Schlüssel des anderen Computers und die ursprüngliche Primzahl, um einen endgültigen gemeinsamen Schlüssel zu erstellen. Dieser Schlüssel wird von beiden Rechnern unabhängig voneinander berechnet, erzeugt aber auf beiden Seiten den gleichen Chiffrierschlüssel.
  6. Nun, da beide Seiten einen gemeinsamen Schlüssel haben, können sie die gesamte SSH-Sitzung symmetrisch verschlüsseln. Der gleiche Schlüssel kann zum Ver- und Entschlüsseln von Nachrichten verwendet werden (lesen Sie den Abschnitt über symmetrische Verschlüsselung).

Nachdem die gesicherte, symmetrisch verschlüsselte Sitzung aufgebaut wurde, muss der Benutzer authentifiziert werden.

Benutzer authentifizieren

Der letzte Schritt, bevor der Benutzer Zugriff auf den Server erhält, ist die Authentifizierung seiner Anmeldedaten. Hierfür verwenden die meisten SSH-Benutzer ein Passwort. Der Benutzer wird aufgefordert, den Benutzernamen einzugeben, gefolgt von dem Passwort. Diese Anmeldedaten werden sicher durch den symmetrisch verschlüsselten Tunnel geleitet, so dass keine Chance besteht, dass sie von Dritten abgefangen werden.

Obwohl Passwörter verschlüsselt werden, ist es dennoch nicht empfehlenswert, Passwörter für sichere Verbindungen zu verwenden. Denn viele Bots können einfache oder voreingestellte Passwörter einfach mit Brute-Force erzwingen und sich Zugang zu Ihrem Konto verschaffen. Stattdessen ist die empfohlene Alternative SSH-Schlüsselpaare.

Dabei handelt es sich um einen Satz asymmetrischer Schlüssel, die zur Authentifizierung des Benutzers verwendet werden, ohne dass ein Passwort eingegeben werden muss.

Fazit

Ein tiefes Verständnis der zugrunde liegenden Funktionsweise von SSH kann Benutzern helfen, die Sicherheitsaspekte dieser Technologie zu verstehen. Die meisten Leute halten diesen Prozess für extrem komplex und unverständlich, aber er ist viel einfacher als die meisten Leute denken. Wenn Sie sich fragen, wie lange ein Computer braucht, um einen Hash zu berechnen und einen Benutzer zu authentifizieren, nun, es geschieht in weniger als einer Sekunde. Tatsächlich wird die meiste Zeit mit der Übertragung von Daten über das Internet verbracht.

Hoffentlich hat Ihnen dieses SSH-Tutorial dabei geholfen, zu sehen, wie verschiedene Technologien zusammengefügt werden können, um ein robustes System zu schaffen, in dem jeder Mechanismus eine sehr wichtige Rolle spielt. Außerdem wissen Sie jetzt, warum Telnet der Vergangenheit angehörte, sobald SSH aufkam.

Für weitere Linux-Tutorials sollten Sie unbedingt einen Blick auf unsere VPS-Tutorials werfen.

Dieser Beitrag wurde zuletzt am 16. Juni 2020 um 4:37 Uhr geändert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.