<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=SSH_Verbindungsaufbau</id>
	<title>SSH Verbindungsaufbau - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=SSH_Verbindungsaufbau"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=SSH_Verbindungsaufbau&amp;action=history"/>
	<updated>2026-04-15T19:22:50Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=SSH_Verbindungsaufbau&amp;diff=68497&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= SSH-Verbindungsaufbau =  SSH baut eine Verbindung in drei aufeinanderfolgenden Phasen auf. Dieser Artikel erklärt, was dabei Schritt für Schritt im Hinterg…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=SSH_Verbindungsaufbau&amp;diff=68497&amp;oldid=prev"/>
		<updated>2026-04-11T12:04:06Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= SSH-Verbindungsaufbau =  SSH baut eine Verbindung in drei aufeinanderfolgenden Phasen auf. Dieser Artikel erklärt, was dabei Schritt für Schritt im Hinterg…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= SSH-Verbindungsaufbau =&lt;br /&gt;
&lt;br /&gt;
SSH baut eine Verbindung in drei aufeinanderfolgenden Phasen auf. Dieser Artikel erklärt, was dabei Schritt für Schritt im Hintergrund passiert – verständlich auch ohne tiefes Vorwissen.&lt;br /&gt;
&lt;br /&gt;
'''Hinweis für Einsteiger:''' Du musst den Verbindungsaufbau nicht auswendig kennen, um SSH zu benutzen. Dieses Wissen hilft dir aber, Fehlermeldungen zu verstehen und zu begreifen, warum SSH so sicher ist.&lt;br /&gt;
&lt;br /&gt;
== Die drei Phasen im Überblick ==&lt;br /&gt;
&lt;br /&gt;
* '''Phase 1 – Transport Layer &amp;amp; Key Exchange:''' Client und Server einigen sich auf einen gemeinsamen, geheimen Schlüssel – ohne ihn jemals direkt zu übertragen.&lt;br /&gt;
* '''Phase 2 – User Authentication:''' Der Server prüft, ob der Client wirklich der ist, der er vorgibt zu sein.&lt;br /&gt;
* '''Phase 3 – Session Phase:''' Die eigentliche Arbeit beginnt – Befehle, Dateiübertragungen, Tunnel usw.&lt;br /&gt;
&lt;br /&gt;
== Phase 1: Transport Layer &amp;amp; Key Exchange ==&lt;br /&gt;
&lt;br /&gt;
In dieser Phase wird der verschlüsselte Kanal aufgebaut. Am Ende kennen beide Seiten einen gemeinsamen geheimen Schlüssel – ohne dass dieser jemals über das Netzwerk gesendet wurde.&lt;br /&gt;
&lt;br /&gt;
=== Begrüßung (Hello) ===&lt;br /&gt;
&lt;br /&gt;
Der Client nimmt Kontakt auf und schickt ein '''ClientHello'''. Darin teilt er dem Server mit, welche kryptographischen Verfahren er unterstützt:&lt;br /&gt;
&lt;br /&gt;
* '''KEX-Algorithmen:''' Verfahren für den Schlüsselaustausch (z. B. &amp;lt;code&amp;gt;curve25519-sha256&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Host-Key-Algorithmen:''' Wie der Server sich ausweisen kann (z. B. &amp;lt;code&amp;gt;ssh-ed25519&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Cipher-Algorithmen:''' Verschlüsselungsverfahren (z. B. &amp;lt;code&amp;gt;aes256-gcm&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''MAC-Algorithmen:''' Methoden zur Integritätsprüfung (z. B. &amp;lt;code&amp;gt;hmac-sha2-256&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Der Server antwortet mit einem '''ServerHello''': Er wählt aus der Liste die Algorithmen aus, die er ebenfalls unterstützt, und schickt außerdem seinen '''öffentlichen Host Key''' mit.&lt;br /&gt;
&lt;br /&gt;
=== Host-Key-Prüfung ===&lt;br /&gt;
&lt;br /&gt;
Der Client hat jetzt den öffentlichen Host Key des Servers. Jetzt stellt sich die Frage: ''Ist das wirklich der richtige Server – oder wurde die Verbindung abgefangen?''&lt;br /&gt;
&lt;br /&gt;
SSH überprüft das mithilfe der Datei &amp;lt;code&amp;gt;~/.ssh/known_hosts&amp;lt;/code&amp;gt;. Dort werden beim ersten Verbindungsaufbau die Fingerabdrücke bekannter Server gespeichert.&lt;br /&gt;
&lt;br /&gt;
'''Warnung:''' Wenn SSH die Meldung &amp;lt;code&amp;gt;WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!&amp;lt;/code&amp;gt; anzeigt, präsentiert der Server einen anderen Key als beim letzten Mal. Das kann ein Hinweis auf einen Angriff sein – oder einfach darauf, dass der Server neu aufgesetzt wurde. Im Zweifel beim Administrator nachfragen, bevor du fortfährst.&lt;br /&gt;
&lt;br /&gt;
=== Diffie-Hellman Key Exchange ===&lt;br /&gt;
&lt;br /&gt;
Jetzt passiert etwas scheinbar Magisches: Client und Server einigen sich auf einen gemeinsamen geheimen Schlüssel – '''ohne ihn jemals zu übertragen'''.&lt;br /&gt;
&lt;br /&gt;
Das Verfahren heißt '''Diffie-Hellman''' (oder in moderner Form ECDH). Die klassische Analogie ist das Farbmischen: Stell dir vor, beide Seiten haben eine gemeinsame Ausgangsfarbe (öffentlich bekannt). Jeder mischt seine eigene Geheimfarbe dazu – und tauscht das Ergebnis aus. Aus diesem Ergebnis kann jeder seine eigene Geheimfarbe wieder herausrechnen und erhält dadurch dieselbe Endfarbe. Ein Lauscher sieht nur die gemischten Farben, nie die Geheimfarben.&lt;br /&gt;
&lt;br /&gt;
Ablauf im Detail:&lt;br /&gt;
&lt;br /&gt;
# Client erzeugt ein zufälliges privates Geheimnis und berechnet daraus einen '''Public Value'''&lt;br /&gt;
# Server macht dasselbe und schickt seinen Public Value sowie eine '''Signatur''' (erstellt mit dem privaten Host Key)&lt;br /&gt;
# Client prüft die Signatur mit dem öffentlichen Host Key des Servers → bestätigt die Serveridentität&lt;br /&gt;
# Beide berechnen unabhängig voneinander denselben '''Session Key'''&lt;br /&gt;
&lt;br /&gt;
=== Session Key – ab jetzt alles verschlüsselt ===&lt;br /&gt;
&lt;br /&gt;
Aus den ausgetauschten Werten berechnen beide Seiten unabhängig voneinander denselben '''symmetrischen Session Key'''. Ab diesem Moment ist die gesamte Kommunikation verschlüsselt – auch die noch folgende Authentifizierung des Nutzers.&lt;br /&gt;
&lt;br /&gt;
== Phase 2: User Authentication (Public Key) ==&lt;br /&gt;
&lt;br /&gt;
Der Kanal ist jetzt verschlüsselt. Jetzt muss der Server wissen: ''Wer will sich hier einloggen – und hat diese Person die Berechtigung?''&lt;br /&gt;
&lt;br /&gt;
Die sicherste Methode ist die '''Public-Key-Authentifizierung'''. Dabei beweist der Client, dass er im Besitz eines privaten Schlüssels ist – ohne diesen jemals zu senden.&lt;br /&gt;
&lt;br /&gt;
Vorbedingung: Der öffentliche Schlüssel des Clients muss vorher auf dem Server hinterlegt werden:&lt;br /&gt;
 ssh-copy-id user@server&lt;br /&gt;
&lt;br /&gt;
Ablauf der Authentifizierung:&lt;br /&gt;
&lt;br /&gt;
# Client schickt einen '''Auth Request''' mit Benutzername, Methode „publickey&amp;quot; und dem verwendeten öffentlichen Schlüssel&lt;br /&gt;
# Server prüft: Ist dieser Public Key in &amp;lt;code&amp;gt;~/.ssh/authorized_keys&amp;lt;/code&amp;gt; eingetragen?&lt;br /&gt;
# Wenn ja: Server schickt eine '''Challenge''' (verschlüsselte Zufallsdaten)&lt;br /&gt;
# Client signiert die Challenge mit seinem '''privaten Schlüssel''' und sendet die Signatur zurück&lt;br /&gt;
# Server prüft die Signatur mit dem öffentlichen Schlüssel → gültig → '''Auth SUCCESS'''&lt;br /&gt;
&lt;br /&gt;
'''Warum ist das sicherer als ein Passwort?''' Der private Schlüssel verlässt den eigenen Rechner nie. Selbst wenn ein Angreifer den gesamten Netzwerkverkehr aufzeichnet, kann er sich nicht einloggen – ohne den privaten Schlüssel ist die Signatur nicht reproduzierbar.&lt;br /&gt;
&lt;br /&gt;
== Phase 3: Session Phase (Channels) ==&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung ist erfolgreich. Jetzt öffnet SSH einen oder mehrere '''Channels''' – logische Kanäle innerhalb der verschlüsselten Verbindung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Channel-Typ !! Verwendung !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shell&amp;lt;/code&amp;gt; || Interaktive Terminal-Sitzung || &amp;lt;code&amp;gt;ssh user@server&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; || Einzelnen Befehl ausführen || &amp;lt;code&amp;gt;ssh user@server ls -la&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;subsystem sftp&amp;lt;/code&amp;gt; || Dateiübertragung per SFTP || &amp;lt;code&amp;gt;sftp user@server&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;direct-tcpip&amp;lt;/code&amp;gt; || Port-Forwarding / Tunnel || &amp;lt;code&amp;gt;ssh -L 8080:localhost:80 user@server&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alle Daten in diesen Channels sind symmetrisch verschlüsselt und integritätsgeschützt – niemand kann die Daten unbemerkt verändern.&lt;br /&gt;
&lt;br /&gt;
== Häufige Fehlermeldungen ==&lt;br /&gt;
&lt;br /&gt;
=== Host-Key-Warnung ===&lt;br /&gt;
&lt;br /&gt;
 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!&lt;br /&gt;
&lt;br /&gt;
'''Ursache:''' Der Host Key des Servers hat sich geändert (z. B. nach Neuinstallation des Servers).&lt;br /&gt;
&lt;br /&gt;
'''Lösung:''' Den alten Eintrag aus &amp;lt;code&amp;gt;~/.ssh/known_hosts&amp;lt;/code&amp;gt; entfernen:&lt;br /&gt;
 ssh-keygen -R server.example.com&lt;br /&gt;
&lt;br /&gt;
=== Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
 Permission denied (publickey).&lt;br /&gt;
&lt;br /&gt;
'''Ursache:''' Der öffentliche Schlüssel ist nicht in &amp;lt;code&amp;gt;~/.ssh/authorized_keys&amp;lt;/code&amp;gt; des Servers eingetragen, oder die Dateiberechtigungen stimmen nicht.&lt;br /&gt;
&lt;br /&gt;
'''Lösung:'''&lt;br /&gt;
 ssh-copy-id user@server&lt;br /&gt;
&lt;br /&gt;
Berechtigungen auf dem Server prüfen:&lt;br /&gt;
 chmod 700 ~/.ssh&lt;br /&gt;
 chmod 600 ~/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== Verwendete Algorithmen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kategorie !! Moderne Empfehlung !! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| Key Exchange (KEX) || &amp;lt;code&amp;gt;curve25519-sha256&amp;lt;/code&amp;gt; || Gemeinsamen Session Key ableiten&lt;br /&gt;
|-&lt;br /&gt;
| Host Key || &amp;lt;code&amp;gt;ssh-ed25519&amp;lt;/code&amp;gt; || Server-Identität beweisen&lt;br /&gt;
|-&lt;br /&gt;
| Symmetrische Verschlüsselung || &amp;lt;code&amp;gt;aes256-gcm@openssh.com&amp;lt;/code&amp;gt; || Datenverschlüsselung&lt;br /&gt;
|-&lt;br /&gt;
| MAC / Integrität || &amp;lt;code&amp;gt;hmac-sha2-256-etm&amp;lt;/code&amp;gt; || Manipulation erkennen&lt;br /&gt;
|-&lt;br /&gt;
| Client-Schlüssel || &amp;lt;code&amp;gt;ed25519&amp;lt;/code&amp;gt; || User Authentication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[SSH]] – Grundlagen und Einführung&lt;br /&gt;
* [[OpenSSH]] – Die meistgenutzte SSH-Implementierung&lt;br /&gt;
* [[SSH-Keygen]] – Schlüsselpaare generieren&lt;br /&gt;
* [[SFTP]] – Sicherer Dateitransfer über SSH&lt;br /&gt;
* [[SSH-Tunnel]] – Port-Forwarding und Tunneling&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.openssh.com/ openssh.com] – Offizielle OpenSSH-Website&lt;br /&gt;
* [https://datatracker.ietf.org/doc/html/rfc4251 RFC 4251] – SSH Protocol Architecture&lt;br /&gt;
* [https://datatracker.ietf.org/doc/html/rfc4252 RFC 4252] – SSH Authentication Protocol&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Netzwerk]]&lt;br /&gt;
[[Kategorie:Sicherheit]]&lt;br /&gt;
[[Kategorie:Kryptographie]]&lt;br /&gt;
[[Kategorie:SSH]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>