SSH (Secure Shell Protocol) und das OpenSSH Projekt
Meta
Erstellt: 1. August 2023
Modifiziert: 25. August 2024
🔼 Root
Inhaltsverzeichnis
Einführung
-
Überblick
1.1 Was ist SSH?
1.2 Was ist SSH nicht?
1.3 Was ist OpenSSH?
1.4 Terminologie -
Aufbau von SSH
2.1 Architektur 2.1 Features
2.2 Quick Tour -
Installation / Konfiguration
3.1 Linux
3.2 Windows -
Client
4.1 Programme
4.2 Basis
4.3 Erweitert -
Automation
-
Quellen
Einführung
SSH ist ein verschlüsseltes Netzwerkprotokoll. Keine Shell (Bash, Powershell, etc.) wie der Name suggeriert. Das SSH-Protokoll umfasst die Authentifizierung, Verschlüsselung und die Integrität der über ein Netzwerk übertragenen Daten. Anders als bei VPN oder HTTPS werden nicht die Datenpakete verschüsselt. Der Tunnel als Transportmedium ist verschlüsselt. Die Datenpakete die tranportiert werden, sind es nicht.
SSH erweiterte die ursprüngliche Terminal Kommunikation über das Netzwerk (Internet). Wenn Nachfolgend von SSH gesprochen wird, ist SSH-2 zu verstehen.
OpenSSH ist Teil des OpenBSD Betriebssystemes (OpenSource). Es hat eine Client - Server Architektur. Die Software wurde für Linux und Windows veröffentlicht. SSH File Transfer Protokoll (auch bekannt als Secure File Transfer Protocol (SFTP) wurde von OpenSSH Projekt als Erweiterung für den Dateitransfer entwickelt. FTP kann auch über «FTPS» oder «FTP over SSH» verschlüsselt werden. SFTP ist der de facto Standard. Weitere Anwendungen:
In diesem Artikel wird nicht auf den Server eingegangen. IPv6 wird nicht berücksichtigt.
Überblick
1.1 Was ist SSH?
SSH ist ein leistungsfähiger und bequemer Ansatz zur Absicherung der Kommunikation in einem Computernetzwerk. Über sichere Authentifizierungs- und Verschlüsselungstechniken unterstützt SSH diverse Netzwerk Funktionen:
- Kryptographisch geschützte Alternativen zu Protokollen wie FTP oder RCP
- Kryptographisch geschützte TCP/IP-Verbindungen. Worin nicht verschlüsselte Protolle wie VNC kommunizieren können
- Parallele TCP/IP-Verbindungen getunnelt werden (Portweiterleitung)
- SSH-Client kann sich wie ein SOCKS-Server verhalten (quasi ein Proxy)
- SSHFS (SSH Filesystem) kann ein entferntes Dateisystem auf dem lokalen Rechner gemountet werden.
1.2 Was ist SSH nicht?
“Secure Shell Protocol” ist keine Shell. Bekannte Shells sind Bash, ZFS und Terminal. SSH ist kein VPN, jedoch ist es auf den ersten Blick hin vergleichbar.
1.3 Was ist OpenSSH?
OpenSSH ist eine Software Lösung. Es enstand aus dem OpenBSD-Projekt. Danach wurde es auf Linux / Unix portiert. Jahre später - 2015 - wurde es von Microsoft als OpenSource Projekt auf Windows portiert.
1.4 Terminologie
- Protokolle gross geschrieben (SSH)
- Befehle klein geschrieben (ssh)
- Produkte mit einem führenden Grossbuchstaben und ggf. weiteren (OpenSSH)
2. Aufbau von SSH
SSH2 baut auf vier Protokollen auf:
• SSH Transport Layer Protocol (SSH-TRANS)
• SSH Authentication Protocol (SSH-AUTH)
• SSH Connection Protocol (SSH-CONN)
• SSH File Transfer Protocol (SSH-SFTP)
SSH-TRANS
SSH-TRANS bildet die Basis für eine Netzwerkverbindung. Es stellt die anfängliche Verbindung, das Aufzeichnungsprotokoll, die Serverauthentifizierung sowie grundlegende Verschlüsselungs- und Integritätsdienste bereit. Nachdem eine SSH-TRANS-Verbindung hergestellt wurde, verfügt der Client über einen sicheren, bidirektionalen Datenstrom zu einem authentifizierten Partner.
SSH-AUTH
Als Nächstes kann der Client über die SSH-TRANS-Verbindung SSH-AUTH verwenden, um sich beim Server zu authentifizieren. SSH-AUTH definiert einen Rahmen, innerhalb dessen mehrere Authentifizierungsmechanismen verwendet werden können.
SSH-AUTH erfordert nur eine Methode: den öffentlichen Schlüssel mit dem DSS-Algorithmus. Es definiert außerdem zwei weitere Methoden: das Passwort und das Hostbasierte. In verschiedenen Internet-Drafts wurden eine Reihe anderer Methoden definiert, von denen einige weite Akzeptanz gefunden haben.
SSH-CONN
SSH-SFTP
Die IANA hat dem Protokoll folgende Ports zugewiesen:
- UDP 22
- TCP 22
- SCTP 22
Die Architektur besteht aus vier Hauptkomponenten:
- Server
- Client
- Session
- Schlüssel
-
Server: Der SSH-Server ist eine Software, die auf einem Host läuft und eingehende Verbindungen von Clients akzeptiert. Er authentifiziert die Clients, stellt Ressourcen bereit und ermöglicht den Zugriff auf den Host über gesicherte Verbindungen.
-
Client: Der SSH-Client ist eine Software, die auf einem anderen Host läuft und sich mit einem SSH-Server verbindet. Er ermöglicht es dem Benutzer, Befehle auf dem Remote-Host auszuführen und Daten sicher zu übertragen. Der Client authentifiziert sich gegenüber dem Server und ermöglicht die Interaktion mit der entfernten Ressource.
-
Session: Eine SSH-Session ist die Grundlage für die Kommunikation zwischen Server und Client. Sie ermöglicht den Austausch von Daten und Befehlen über verschlüsselte Verbindungen. Während einer Sitzung können mehrere Kanäle für verschiedene Arten von Datenübertragungen geöffnet werden, z.B. für die Ausführung von Befehlen, die Übertragung von Dateien oder die Weiterleitung von X11-Grafiken.
-
Schlüssel: Schlüssel spielen eine zentrale Rolle in SSH. Es gibt zwei Hauptarten von Schlüsseln: den öffentlichen Schlüssel und den privaten Schlüssel. Der öffentliche Schlüssel wird auf dem Server hinterlegt und ermöglicht die Authentifizierung des Clients. Der private Schlüssel wird vom Client gehalten und dient zur Entschlüsselung von Daten, die mit dem öffentlichen Schlüssel des Servers verschlüsselt wurden.
Ergänzung zu Punkt 4:
Es ist wichtig zu beachten, dass die Verfügbarkeit dieser Methoden von der SSH-Serverkonfiguration abhängt. Administratoren können festlegen, welche Methoden auf ihrem Server akzeptiert werden.
Die ersten Generationen von Raspberry Pi hatten lange Zeit einen SSH Server ohne Authentifizierung integriert. Typisch sind Benutzernamen / Passwort und asymmetrischen Verschlüsselung (“Privat- / Public-Key). Die Variante Benutzernamen bietet weniger Sicher gegenüber der Sclüsselmethode. D.h. sie sollte in der Praxis nicht verwendet werden.
Eine vollständige Liste der Authentifizierungsmethoden, die in SSH verwendet werden können:
-
Passwort: Die traditionelle Methode, bei der der Benutzername und das Passwort zur Authentifizierung verwendet werden.
-
Schlüssel: Diese Methode basiert auf der Verwendung eines Schlüsselpaars: einem öffentlichen Schlüssel, der auf dem Server gespeichert ist, und einem dazugehörigen privaten Schlüssel, der vom Client gehalten wird. task
-
Tastatur-Interaktiv Hierbei handelt es sich um eine interaktive Authentifizierungsmethode, bei der der Server eine Herausforderung an den Client sendet und der Benutzer eine Antwort eingeben muss. Dies kann zusätzliche Sicherheit bieten, wenn sie in Kombination mit anderen Methoden verwendet wird.
-
GSSAPI (Generic Security Services Application Programming Interface) Diese Methode ermöglicht die Verwendung von externen Sicherheitsmechanismen wie Kerberos zur Authentifizierung. Sie wird oft in Unternehmensumgebungen eingesetzt.
-
Hostbasierte Authentifizierung Bei dieser Methode erfolgt die Authentifizierung basierend auf dem Hostnamen oder der IP-Adresse des Clients. Dies kann in bestimmten Fällen nützlich sein, wird jedoch aufgrund von Sicherheitsbedenken weniger häufig verwendet.
-
Zertifikat Diese Methode verwendet X.509-Zertifikate zur Authentifizierung. Sie ist komplexer einzurichten, bietet jedoch eine hohe Sicherheit und Skalierbarkeit.
-
Krypto-Token: Hierbei handelt es sich um Hardware-Token oder Smartcards, die zur Authentifizierung verwendet werden. Dies kann eine zusätzliche Sicherheitsebene bieten, indem der private Schlüssel physisch geschützt wird. Bekanntes Beispiel ist Yubi-Key.
-
KBD-Interactive: Diese Methode ermöglicht die Authentifizierung über eine interaktive Benutzeroberfläche, die vom Server bereitgestellt wird. Vergleichbar mit der Tastatur-Interaktiv-Methode.
3. Installation
4. Client
Die Dokumentation ist auf der Website des Projektes.
Die für den Clients relevanten Tools in alphabetischer Reihenfolge:
| Tool | Linux | Win | Zweck |
|---|---|---|---|
| scp | X | X | Dateien / Verzeichnisse kopieren |
| sftp | X | X | Dateien / Verzeichnisse kopieren |
| ssh | X | X | Entfernten Computer zugreifen |
| ssh-add | X | X | Passwort im Arbeitsspeicher hinzufügen |
| ssh-agent | X | X | Passwort im Arbeitsspeicher verwalten |
| ssh-keygen | X | X | Schlüsselpaar erzeugen |
| ssh-keyscan | X | X | Public Key auf einem Computer anzeigen |
Schlüssel Management und Agenten
Wenn von “SSH Schlüsseln” gesprochen wird, dann ist die seit langem bekannte und verbreiteten asymmetrische Verschlüsselung gemeint. Quasi ein Synonym. Asymmetrische Verschlüsselung, auch als “Public Key Verfahren” bekannt, ist ein Konzept der Kryptographie, bei dem ein Schlüsselpaar bestehend aus öffentlichem und privatem Schlüssel verwendet wird, um Nachrichten zu verschlüsseln und zu entschlüsseln.
Dazu bedarf es nur weniger Schritte:
- Schlüsselpaar (Privat- / Public-Key) mit Passwort erstellen
- Public Key auf dem Server ablegen
Damit der Privat-Key beim Verbindungsaufbau automatisch übergeben wird, folgt noch ein weiterer Punkt
Fakultativ (Sicherheit versus Komfort): 3. Den PrivatKey dem SSH-Agent übergeben.
Der SSH-Agent übergibt den Privat-Key beim Verbindungsaufbau. Somit wird ein Angriffsvektor geschaffen. Wie relevant dieser in der Praxis ist, muss man selber abwägen.
SSH Server mit NMAP
Einen SSH Server mit NMAP testen:
nmap -p22 -sC # Default nmap scripts for SSH? nmap -p22 -sV # Version? nmap -p22 –script ssh2-enum-algos # algorythms? nmap -p22 –script ssh-hostkey –script-args ssh_hostkey=full # weak keys? nmap -p22 –script ssh-auth-methods –script-args=“ssh.user=root” # Check authentication methods
Tool
Simon Tatham Tools (Putty)
SSH war lange Zeit unter Windows nicht verfügbar. Daher sprangen Dritthersteller ein. Einer der ersten und bekanntesten Tool Lieferanten war Simon Tatham. “Putty” war nur eines der Tools aus einer ganzen Suite:
| Name | Beschreibung |
|-----------|----------------------------------------------------------------------------------------------------------|
| PuTTY | Terminalemulator mit Telnet-, Rlogin- und SSH-Client |
| PSCP | PuTTY Secure Copy client: ein SCP-Client |
| PSFTP | PuTTY Secure File Transfer (SFTP) client: ein SFTP-Client |
| PuTTYtel | Terminalemulator mit Telnet- und Rlogin-Client |
| Plink | PuTTY Link: PuTTY als Commandline-Tool (ohne grafische Oberfläche) |
| Pageant | PuTTY authentication agent: ein SSH-Agent, mit dem SSH-Authentifizierungen weitergereicht werden können |
| PuTTYgen | PuTTY Key Generator: erstellt kryptographische Schlüsselpaare |
| pterm | Ein unabhängiger Terminal-Emulator |
WinSCP
WinSCP war eines der ersten Windowsprogramme, welches die Protokolle SCP und SFTP unterstützte. Speziell in seiner Norton Commander O ptik war er für Windows Benutzer einfach zu bedienen. Open Source.
Bitvise
Ebenfalls schon längere Zeit eine Software für Windows. Der Client kann kostenlos genutzt werden (Spenden erwünscht).
SecureCRT
Die Terminallösung die IT Profis bevorzugen. Gerade in der Cisco Welt sehr verbreitet.
Quellen
RFC
- RFC4250 - The Secure Shell (SSH) Protocol Assigned Numbers
- RFC4251 - The Secure Shell(SSH) Protocol Architecture
- RFC4252 - The Secure Shell (SSH) Authentication Protocol
- RFC4253 - The Secure Shell (SSH) Transport Layer Protocol
- RFC4254 - The Secure Shell (SSH) Connection Protocol
- RFC4255 - Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
- RFC4256 - Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)
- RFC4419 - Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol
- RFC4462 - Generic Security Service Application Program Interface (GSS-API) Authentication and Key Exchange for the Secure Shell (SSH) Protocol. OpenSSH extensions and deviations - SSH extensions implemented by the most common SSH server
Andere
- Website OpenSSH Project
- QuickRe* f.ME: SSH cheatsheet
- Thomas Kreen: SSH Tricks und Tipps im SSH Cheat Sheet
- WinSCP))
- Windows SSH Clien* t Bitvise))
- Gi* tHub: WinSCP))
- SecureCR* T))
- SSH.COM Academy –* What is SSH?))
- How to Use SSH with Git
- Wikipedia.de: Secure Sh* ell)
- Wikipedia.org: Secure S* hell
- Wikipedia.de: * OpenSSH)
- Wikipedia.org* : OpenSSH