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…“)
 
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
−
= Remote Services – SSH =
+
*[[SSH Grundlagen]]
−
 
+
*[[SSH Verbindungsaufbau]]
−
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.
+
*[[SSH Client]]
−
 
+
*[[SSH Server]]
−
== Was SSH verhindert ==
+
*[[SSH Dateiübertragung]]
−
 
+
*[[SSH und SFTP]]
−
* DNS Spoofing
+
<!---
−
* IP Spoofing
+
*[[SSH rsync]]
−
* IP Source Routing
+
*[[Debian klonen]]
−
* 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]]
 

Aktuelle Version vom 30. Juli 2026, 07:44 Uhr