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