OpenSSH Paket: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „= Remote Services – SSH = SSH (Secure Shell) ist ein Netzwerkprotokoll für den sicheren Zugriff auf entfernte Systeme. Es verschlüsselt die gesamte Kommun…“
 
Der Seiteninhalt wurde durch einen anderen Text ersetzt: „*SSH Misc“
Markierung: Ersetzt
Zeile 1: Zeile 1:
= Remote Services – SSH =
*[[SSH Misc]]
 
SSH (Secure Shell) ist ein Netzwerkprotokoll für den sicheren Zugriff auf entfernte Systeme. Es verschlüsselt die gesamte Kommunikation und ersetzt unsichere Protokolle wie Telnet oder FTP.
 
== Was SSH verhindert ==
 
* DNS Spoofing
* IP Spoofing
* IP Source Routing
* Ausspähen von Klartextkennwörtern und Nutzdaten
* Manipulation von übertragenen Daten
* Angriffe auf den X11-Server
 
== SSH ersetzt ==
 
{| class="wikitable"
! Altes Protokoll !! Ersetzt durch
|-
| telnet, rlogin || ssh
|-
| ftp, rcopy || scp / sftp
|}
 
----
 
= Das OpenSSH Paket =
 
OpenSSH ist die meistverbreitete Implementierung des SSH-Protokolls unter Linux/Unix. Es enthält folgende Programme:
 
* '''ssh''' – Remote-Login und Befehlsausführung
* '''scp''' – Secure Copy (Dateiübertragung)
* '''sftp''' – Secure FTP (interaktive Dateiübertragung)
* '''ssh-keygen''' – Schlüsselpaar generieren
* '''ssh-agent''' – Schlüsselverwaltung im Speicher
* '''ssh-add''' – Schlüssel zum Agent hinzufügen
 
----
 
= SSH Verbindungsszenarien =
 
[[Datei:1775821094920_image.png|600px|SSH Verbindungsszenarien]]
 
Es gibt zwei typische Szenarien:
 
; Lokaler unprivilegierter Benutzer loggt sich als remote unprivilegierter Benutzer ein
: alice (ssh client) → ssh Verbindung → bob (ssh server)
 
; Lokaler unprivilegierter Benutzer loggt sich als root ein
: alice (ssh client) → ssh Verbindung → root (ssh server)
 
----
 
= SSH Verbindungsaufbau =
 
Der SSH-Verbindungsaufbau läuft in 3 Phasen ab:
 
== Phase 1: Transport Layer + Key Exchange ==
 
[[Datei:Ssh-verbindungsaufbau-3_drawio.png|700px|SSH Verbindungsaufbau Public Key Auth]]
 
# '''ClientHello''' – Client schickt unterstützte Algorithmen (KEX, Host-Key, Cipher/Hash/MAC)
# '''ServerHello''' – Server wählt Algorithmen und schickt seinen öffentlichen Host Key
# '''Host-Key-Prüfung''' – Client vergleicht den Host Key mit <code>~/.ssh/known_hosts</code>, bei unbekanntem Host kommt eine Fingerprint-Warnung
# '''Diffie-Hellman/ECDH''' – Client sendet Public-Value, Server antwortet mit DH Public-Value + Signatur mit privatem Host Key
# '''Session Key Berechnung''' – Beide Seiten berechnen denselben Schlüssel → ab jetzt: symmetrische Verschlüsselung
 
; Diffie-Hellman Prinzip
: Protokoll zur Schlüsselvereinbarung. Es ermöglicht, dass zwei Kommunikationspartner über eine öffentliche, abhörbare Leitung einen gemeinsamen geheimen Schlüssel in Form einer Zahl vereinbaren können.
 
== Phase 2: User Authentication ==
 
Ab hier ist die gesamte Kommunikation verschlüsselt.
 
=== Authentifizierung mit Public Key ===
 
[[Datei:Ssh-verbindungsaufbau-3_drawio.png|700px|SSH Verbindungsaufbau Public Key Auth]]
 
# Client sendet: Username, Methode »Public Key«, welcher Public Key
# Server prüft: Ist der Public Key in <code>~/.ssh/authorized_keys</code>?
#* NEIN → Auth fail
#* JA → Challenge (Zufallsdaten) senden
# Client signiert die Challenge mit dem privaten Client Key und schickt die Signatur zurück
# Server prüft Signatur mit dem öffentlichen Client Key → bei Erfolg: '''Auth SUCCESS'''
 
=== Authentifizierung mit Passwort ===
 
[[Datei:Ssh-verbindungsaufbau-5_drawio.png|700px|SSH Verbindungsaufbau Passwort Auth]]
 
# Client sendet: Username + Methode »Password«
# Client sendet: Username + Passwort (verschlüsselt!)
# Server prüft Passwort:
#* NEIN → Auth fail
#* JA → Auth ok
 
== Phase 3: Session Phase (Channels) ==
 
* Session Channel wird geöffnet: Shell / Exec / PTY
* Symmetrisch verschlüsselt
* Integritätsgeschützt
 
----
 
= Schlüsseldateien =
 
== Server – Hostschlüssel ==
 
Der Server hat eigene Schlüsselpaare zur Identifikation:
 
; Geheime Hostschlüssel (nur root lesbar!)
<pre>
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
</pre>
 
; Öffentliche Hostschlüssel
<pre>
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
</pre>
 
== Client – Benutzerschlüssel ==
 
; Geheimer Benutzerschlüssel (nur der Benutzer darf ihn lesen!)
~/.ssh/id_rsa
 
; Öffentlicher Benutzerschlüssel
~/.ssh/id_rsa.pub
 
----
 
= SSH Authentifizierung mit Public/Private Keys =
 
== Schlüssel generieren – ssh-keygen ==
 
[[Datei:Ssh-agent1-1_drawio.png|700px|SSH Agent Übersicht]]
 
# Eine '''Zufallszahl''' dient als Basis für die Schlüsselgenerierung
# '''ssh-keygen''' erzeugt ein Schlüsselpaar:
#* '''Privater Schlüssel''' – bleibt lokal, wird mit einer Passphrase geschützt gespeichert
#* '''Öffentlicher Schlüssel''' – wird auf den Server kopiert
# Der private Schlüssel wird mit einer '''Passphrase''' verschlüsselt → '''Geschützter Schlüssel''' auf der Harddisk
 
<pre>
ssh-keygen -t ed25519 -C "kommentar@beispiel.de"
</pre>
 
== Öffentlichen Schlüssel auf Server hinterlegen ==
 
Der öffentliche Schlüssel des Benutzers muss auf dem Server in folgende Datei eingetragen werden:
 
~/.ssh/authorized_keys
 
Jede Zeile enthält den Schlüssel eines Benutzers. Zur Übersicht empfiehlt es sich, am Ende der Zeile eine Beschreibung (z. B. E-Mail) hinzuzufügen:
 
<pre>
ssh-rsa AAAAB3Nz...== rudi.ruessel@beispiel.de
ssh-rsa AAAAB3Nz...== erwin.lindemann@beispiel.de
</pre>
 
== Known Hosts – Serververtrauen auf Client-Seite ==
 
Die Datei <code>~/.ssh/known_hosts</code> speichert die öffentlichen Hostschlüssel aller bekannten Server. Bei jeder Verbindung wird der Schlüssel des Servers damit verglichen.
 
<pre>
~/.ssh/known_hosts
</pre>
 
Beim ersten Verbindungsaufbau zu einem unbekannten Server erscheint eine Fingerprint-Warnung – erst nach Bestätigung wird der Schlüssel gespeichert.
 
----
 
= SSH Agent =
 
== Wozu ein SSH Agent? ==
 
* Für zusätzliche Sicherheit wird der private Schlüssel verschlüsselt (mit Passphrase) gespeichert
* Die Eingabe der Passphrase bei jeder Verbindung ist mühsam
* Lösung: '''ssh-agent''' entschlüsselt den Schlüssel einmalig und hält ihn sicher im '''Arbeitsspeicher'''
* SSH-Clients kommunizieren mit dem Agent über einen Unix-Domain-Socket
* Der Agent läuft über die gesamte lokale Anmeldesitzung
 
== Ablauf ssh-add ==
 
# Geschützter Schlüssel von der Harddisk + Passphrase eingeben
# → ssh-add entschlüsselt → privater Schlüssel landet im Arbeitsspeicher
# SSH-Clients (ssh, scp, sftp, rsync) nutzen den Schlüssel automatisch vom Agent
 
== SSH Agent einrichten (systemd) ==
 
Damit der SSH Agent automatisch beim Anmelden startet:
 
; 1. Servicedatei anlegen
vim ~/.config/systemd/user/ssh-agent.service
 
<pre>
[Unit]
Description=SSH key agent
 
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
Environment=DISPLAY=:0
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
 
[Install]
WantedBy=default.target
</pre>
 
; 2. Service aktivieren
systemctl --user enable --now ssh-agent.service
 
; 3. SSH konfigurieren – Schlüssel automatisch zum Agent hinzufügen
vim ~/.ssh/config
 
<pre>
AddKeysToAgent yes
</pre>
 
; 4. Umgebungsvariable setzen (in .bash_profile / .zprofile / .xinitrc / .xprofile)
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
 
Siehe auch: [[ssh agent start]] (für Systeme ohne grafische Oberfläche)
 
----
 
= Weiterführende Themen =
 
== Grundlagen ==
* [[ssh Grundlagen]]
* [[ssh Verbindungsaufbau]]
* [[ssh Algorythmen]]
* [[ssh host finger print]]
 
== Client & Server ==
* [[ssh Clientseite]]
* [[ssh Serverseite]]
* [[ssh misc]]
 
== Dateiübertragung ==
* [[scp]]
* [[rsync]]
* [[SFTP-Server]]
 
== Authentifizierung ==
* [[SSH Agent]]
* [[Authentifizierung mit Schlüssel]]
* [[ssh passwort auf key]]
* [[ssh passt id_rsa zu id_rsa.pub]]
* [[two-factor authentication]]
 
== Fortgeschrittene Themen ==
* [[ssh Jumphost]]
* [[ssh Tunnel]]
* [[ssh Socks Proxy]]
* [[ssh VPN]]
* [[SSH_PPP_VPN]]
* [[autossh]]
 
== Windows ==
* [[ssh Windows]]
* [[SSH-Agent Windows Powershell]]
* [[SSHD Powershell]]
* [[Putty Tools]]
* [[Filezilla]]
 
== Schnelleinstiege & Anleitungen ==
* [[ssh schnelleinstieg]]
* [[ssh howto]]
* [[ssh Aufgaben]]
 
----
 
= Externe Quellen =
 
* [https://www.jfranken.de/homepages/johannes/vortraege/ssh1.de.html SSH Grundlagen (jfranken.de)]
* [https://www.digitalocean.com/community/tutorials/how-to-harden-openssh-on-ubuntu-18-04-de OpenSSH Hardening (DigitalOcean)]
* [https://www.sshaudit.com/hardening_guides.html SSH Audit – Hardening Guides]
 
[[Kategorie:SSH]]
[[Kategorie:Netzwerk]]

Version vom 11. April 2026, 11:45 Uhr