Das Secure Shell Protocol (SSH) ist in der Linux-Welt die gebräuchlichste Methode zur Steuerung von Remote-Rechnern über die Befehlszeile. SSH ist ein echtes Linux-Original und wird auch in der Windows-Welt immer beliebter. Es gibt sogar eine offizielle Windows-Dokumentation für SSH, die die Steuerung von Windows-Rechnern mit OpenSSH behandelt.
Dieser Artikel beschreibt, wie Sie mit dem beliebten Open-Source-Tool PuTTY eine SSH-Verbindung von einem Windows-Rechner zu einem Fedora 33 Linux-System herstellen.
Möglichkeiten zur Verwendung von SSH
SSH verwendet eine Client-Server-Architektur, bei der ein SSH-Client eine Verbindung zu einem SSH-Server herstellt. Der SSH-Server läuft normalerweise als System-Daemon, daher wird er oft als SSHD bezeichnet. Sie können kaum eine Linux-Distribution finden, die nicht mit dem SSH-Daemon geliefert wird. In Fedora 33 ist der SSH-Daemon installiert, aber nicht aktiviert.
Sie können SSH verwenden, um fast jeden Linux-Computer zu steuern, egal ob er als virtueller Computer oder als physisches Gerät in Ihrem Netzwerk ausgeführt wird. Ein häufiger Anwendungsfall ist die Headless-Konfiguration von Embedded-Geräten, einschließlich des Raspberry Pi. SSH kann auch zum Tunneln anderer Netzwerkdienste verwendet werden. Da der SSH-Datenverkehr verschlüsselt ist, können Sie SSH als Transportschicht für jedes Protokoll verwenden, das standardmäßig keine Verschlüsselung bietet.
In diesem Artikel erkläre ich vier Möglichkeiten, SSH zu verwenden: 1. wie man den SSH-Daemon auf der Linux-Seite konfiguriert, 2. wie man eine Remote-Konsolenverbindung einrichtet, 3. wie man Dateien über das Netzwerk kopiert und 4 … wie man ein bestimmtes Protokoll über SSH tunnelt.
1. SSHD konfigurieren
Das Linux-System (in meinem Fall Fedora 33) fungiert als SSH-Server, der es dem PuTTY-SSH-Client ermöglicht, eine Verbindung herzustellen. Überprüfen Sie zunächst die SSH-Konfiguration des Daemons. Die Konfigurationsdatei befindet sich unter /etc/ssh/sshd_config
und enthält viele Schalter, die durch Auskommentieren verwandter Zeilen aktiviert werden können:
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Die Standardkonfiguration, bei der keine Zeile unkommentiert ist, sollte für dieses Beispiel funktionieren. Überprüfen Sie, ob der SSH-Daemon bereits läuft, indem Sie eingeben systemctl status sshd
:
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-06-22 11:12:05 UTC; 2 years 11 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 577 (sshd)
Tasks: 1 (limit: 26213)
CGroup: /system.slice/sshd.service
└─577 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-[...]
Wenn es inaktiv ist, starten Sie es mit dem systemctl start sshd
Befehl.
2. Richten Sie eine Remote-Konsole ein
Laden Sie unter Windows das PuTTY-Installationsprogramm herunter, installieren und öffnen Sie es. Sie sollten ein Fenster wie dieses sehen:
putty_connection_settings.png
(Stephan Avenwedde, CC BY-SA 4.0)
In dem Hostname oder IP-Adresse) Eingabefeld geben Sie die Verbindungsinformationen für Ihr Linux-System ein. In diesem Beispiel richte ich eine virtuelle Fedora 33-Maschine mit einem überbrückten Netzwerkadapter ein, mit dem ich das System unter der IP-Adresse kontaktieren kann 192.168.1.60
. Klicken Offen, und ein Fenster wie dieses sollte sich öffnen:
putty_host_key.png

(Stephan Avenwedde, CC BY-SA 4.0)
Dies ist ein SSH-Sicherheitsmechanismus, um einen Man-in-the-Middle-Angriff zu verhindern. Der Fingerabdruck in der Nachricht sollte mit dem Schlüssel auf dem Linux-System bei . übereinstimmen /etc/ssh/ssh_host_ed25519_key.pub.
. PuTTY druckt den Schlüssel als MD5-Hash. Um die Authentizität zu überprüfen, wechseln Sie zum Linux-System, öffnen Sie eine Befehlsshell und geben Sie Folgendes ein:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
Die Ausgabe sollte mit dem von PuTTY angezeigten Fingerabdruck übereinstimmen:
$ ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
256 MD5:E4:5F:01:05:D0:F7:DC:A6:32 no comment (ED25519)
Bestätigen Sie die PuTTY-Sicherheitswarnung, indem Sie auf klicken Jawohl. Der Fingerabdruck des Hostsystems befindet sich nun in der Vertrauensliste von PuTTY, die sich in der Windows-Registrierung unter:
HKEY_CURRENT_USERSOFTWARESimonTathamPuTTYSshHostKeys
Geben Sie Ihre korrekten Anmeldedaten ein, und Sie sollten sich auf der Konsole in Ihrem Home-Verzeichnis befinden:
ssh_successfull_login.png

(Stephan Avenwedde, CC BY-SA 4.0)
3. Dateien über das Netzwerk kopieren
Neben der Remote-Konsole können Sie mit PuTTY Dateien per SSH übertragen. Schau mal im Installationsordner unter C:\Program Files (x86)\PuTTY
und finde pscp.exe
. Sie können dies verwenden, um Dateien von und zu einem Linux-System zu kopieren.
Öffnen Sie eine Eingabeaufforderung mit Windows + R und geben Sie ein cmd. Kopieren Sie die Datei MyFile.txt
von Ihrem Linux-Benutzer-Home-Verzeichnis in Ihr Windows-Home-Verzeichnis, indem Sie Folgendes eingeben:
C:"Program Files (x86)"PuTTYpscp.exe [email protected]:/home/stephan/MyFile.txt .
Geben Sie Folgendes ein, um eine Datei aus dem Windows-Home-Verzeichnis in das Linux-Benutzer-Home-Verzeichnis zu kopieren:
C:"Program Files (x86)"PuTTYpscp.exe MyFile.txt [email protected]:/home/stephan/
Wie Sie vielleicht bereits herausgefunden haben, ist die allgemeine Struktur des Kopierbefehls:
pscp.exe <source> <target>
4. Tunneln Sie ein Protokoll
Stellen Sie sich vor, Sie haben einen Linux-Rechner, auf dem ein HTTP-basierter Dienst für eine beliebige Anwendung ausgeführt wird. Sie möchten von Ihrem Windows-Rechner über das Internet auf diesen HTTP-Dienst zugreifen. Natürlich können Sie den zugehörigen TCP-Port nicht der Öffentlichkeit zugänglich machen, weil:
- Auf dem Server läuft HTTP, nicht HTTPS
- Es gibt überhaupt keine Benutzerverwaltung und kein Login
Auf den ersten Blick scheint es eine unmögliche Aufgabe zu sein, diese Architektur einzurichten, ohne eine schreckliche Sicherheitslücke zu erzeugen. SSH macht es jedoch relativ einfach, eine sichere Lösung für dieses Szenario einzurichten.
Diese Vorgehensweise werde ich mit meinem Softwareprojekt Pythonic demonstrieren. Als Container ausgeführt, stellt Pythonic zwei TCP-Ports bereit: TCP-Port 7000 (Haupteditor) und TCP-Port 8000 (der Quellcode-Editor des Codeservers).
Führen Sie Folgendes aus, um Pythonic auf einem Linux-Computer zu installieren:
podman pull pythonicautomation/pythonic
podman run -d -p 7000:7000 -p 8000:8000 pythonic
Wechseln Sie zu Ihrem Windows-Computer, öffnen Sie PuTTY und navigieren Sie zu Verbindung -> SSH -> Tunnel. Fügen Sie die beiden TCP-Ports hinzu, die Sie weiterleiten möchten:
- Quelle:
7000
/ Ziel:localhost:7000
- Quelle:
8000
/ Ziel:localhost:8000
ssh_port_forwarding.png

(Stephan Avenwedde, CC BY-SA 4.0)
Dann geh zurück zum Sitzung Abschnitt und stellen Sie wie zuvor eine SSH-Verbindung her. Öffnen Sie einen Browser und navigieren Sie zu https://localhost:7000
; Sie sollten einen Bildschirm wie diesen sehen:
pythonic_screen.png

(Stephan Avenwedde, CC BY-SA 4.0)
Sie haben die Portweiterleitung erfolgreich konfiguriert!
WarnungHinweis: Wenn Sie TCP-Port 22 der Öffentlichkeit zugänglich machen, verwenden Sie keine leicht zu erratenden Anmeldeinformationen. Sie erhalten Anmeldeversuche aus der ganzen Welt, die versuchen, mit gängigen Standard-Anmeldeinformationen auf Ihren Linux-Rechner zuzugreifen. Erlauben Sie stattdessen nur bekannten Clients, sich anzumelden. Diese Anmeldebeschränkung kann mithilfe von Public-Key-Kryptografie erreicht werden, bei der ein Schlüsselpaar verwendet wird, bei dem der öffentliche Schlüssel auf dem SSH-Hostcomputer gespeichert ist und der private Schlüssel beim Client verbleibt.
Debugging
Wenn Sie Schwierigkeiten haben, eine Verbindung zu Ihrem Linux-Rechner herzustellen, können Sie die Prozesse in Ihrem SSH-Daemon mit folgenden Schritten verfolgen:
journalctl -f -u sshd
So sieht ein gewöhnlicher Login-Prozess mit LogLevel DEBUG aus:
sshd_debug_log.png

(Stephan Avenwedde, CC BY-SA 4.0)
Mehr erfahren
Dieser Artikel hat kaum an der Oberfläche gekratzt, was die Verwendung von SSH angeht. Wenn Sie nach Informationen zu einem bestimmten Anwendungsfall suchen, finden Sie diese wahrscheinlich unter den unzähligen SSH-Tutorials im Internet. Ich verwende PuTTY häufig bei der Arbeit, da es aufgrund seiner einfachen Konfiguration und der guten Interoperabilität zwischen den Betriebssystemen zu einem Schweizer Taschenmesser für Konnektivitätslösungen wird.