Wiki: SSH: Unterschied zwischen den Versionen
Ben (Diskussion | Beiträge) add example ssh_config entry for easy connecting to the ifi-ssh servers |
Yorik (Diskussion | Beiträge) Some Terminal servers are behind the VPN. Add Proxy Jump to example config to fix this |
||
| Zeile 96: | Zeile 96: | ||
Netterweise listet der Server ''isildur.informatik.uni-kiel.de'' diese auf, beim Versuch, sich mit ihm per SSH zu verbinden. | Netterweise listet der Server ''isildur.informatik.uni-kiel.de'' diese auf, beim Versuch, sich mit ihm per SSH zu verbinden. | ||
Um das Verbinden zu vereinfachen kann der folgende ssh_config Eintrag nützlich | Um das Verbinden zu vereinfachen kann der folgende ssh_config Eintrag nützlich sein: | ||
<pre> | <pre> | ||
Host | Host bombadil boromir denethor | ||
Hostname %h.informatik.uni-kiel.de | |||
User stuXXXXXX | |||
Host beorn elendil eomer gimli legolas | |||
Hostname %h.informatik.uni-kiel.de | |||
User stuXXXXXX | |||
ProxyJump boromir | |||
Host git.informatik.uni-kiel.de | |||
Hostname git.informatik.uni-kiel.de | |||
User git | |||
ProxyJump boromir | |||
</pre> | </pre> | ||
Version vom 1. August 2024, 16:31 Uhr
SSH steht für Secure Shell und ist ein verschlüsselndes Netzwerkprotokoll. Dieses kann insbesondere dazu genutzt werden, auf einem lokalen Computer mit einer Shell zu interagieren, welche einem fernen (remote) Computer bzw. Server zugehörig ist, d.h. alle Operationen, abgesehen von den visuellen der Shell dort tätigt.
Sie ist vor allem im Umfeld unixoider Betriebssysteme, etwa *BSD oder GNU/Linux, insbesondere zur Serveradministration, gebräuchlich.
Sie ist aber auch abseits der Serveradministration sehr nützlich, etwa um einen #SOCKS Proxy bereitzustellen.
Insbesondere stellt das Institut für Informatik (IfI) seinen Studierenden und Mitarbeitern einige per SSH erreichbare Server zur Verfügung (siehe #SSH Server des IfI).
Verwendung
Unixoide Systeme als Client
Unter unixoiden Betriebssystemen (einschließlich macOS) ist in aller Regel ein SSH client namens ssh vorinstalliert, falls nicht, sollte mensch wissen, wie ein solcher (etwa OpenSSH) nachzuinstallieren ist.
Windows als Client
Für Windows gibt es ein Programm namens PuTTY. Im Folgenden wird vor allem die Benutzung unter unixoiden Betriebssystemen, d.h. insbesondere von der Kommandozeile aus, beschrieben. PuTTY unterscheidet sich vor allem darin, daß die Maus benutzt werden muß.
Interaktive Shell
Um eine interaktive Shell (üblichster Anwendungsfall) auf einem entfernten Rechner zu erhalten, wird in der Regel das Programm ssh von der Kommandozeile aus ausgeführt.
Auf einem unixoiden System, öffne dazu zunächst eine virtuelle Konsole (CTRL+ALT+F<N>) oder ein graphisches Terminal (etwa xterm oder gnome-terminal). Dann tippe folgenden Befehl ein und führe ihn mit einem abschließenden Enter aus.
ssh user@server
Hierbei ist server die IP oder der FQDN (etwa my.example.org) des Zielservers und user ein Username der auf diesem Server existiert und für welchen Authentifizierungsdaten (etwa ein Passwort) vorliegen. Der Präfix user@ kann weggelassen werden, mit der Konsequenz, daß der lokale Nutzername verwandt wird. Dieser muß dann natürlich auch auf dem Zielserver existieren.
Beim ersten Verbinden zu einem neuen Server ist der HostKey zu akzeptieren. Im Idealfall wird die erste Verbindung durchgeführt, wenn der Server sich im lokalen Netzwerk des Clients befindet, um einen MITM-Angriff auszuschließen.
Bei weiteren Verbindungen wird dieser HostKey genutzt, um die Identität des Servers zu überprüfen. Schlägt diese Prüfung fehl, wird ein Fehler angezeigt und die Verbindung wird unterbrochen bzw. nicht zu Ende aufgebaut.
Private / Public keys
SSH erlaubt neben der Passwort-basierten Authentifikation auch eine Authentifikation durch ein Schlüsselpaar (etwa RSA oder ed25519). Die Nutzung solcher Schlüsselpaare zur Authentifikation ist i.A. weitaus sicherer und wird so auch von vielen Servern erzwungen (bzw. zumindest Passwort-basierte Authentifikation unterbunden).
Ein Schlüsselpaar sollte immer auf dem Client erstellt werden. Der Befehl dazu lautet ssh-keygen. Z.B. kann ein ed25519 Schlüsselpaar, welches vielleicht für kram.example.org gedacht ist, wie folgt erstellt werden.
ssh-keygen -t ed25519 -f ~/.ssh/kram_key
Dies erzeugt einen privaten Schlüssel in der Datei ~/.ssh/kram_key und einen öffentlichen in der Datei ~/.ssh/kram_key.pub (SSH Schlüssel werden üblicherweise unter ~/.ssh abgelegt). Bei der Erstellung kann optional ein Passwort gewählt werden, was den privaten Schlüssel auf der Client-Maschine vor unberechtigtem Zugriff schützt.
Um das Schlüsselpaar zu nutzen, ist nun auf dem Server unter dem entsprechenden Nutzerverzeichnis der Datei ~/.ssh/authorized_keys eine Zeile mit dem öffentlichen Schlüssel, d.h. dem Inhalt der Datei kram_key.pub, hinzuzufügen. Eventuell existiert die Datei noch nicht, muß also neu erstellt werden. Wurde die Datei auf den Server kopiert, so genügt es in jedem Fall, dort den Befehl
cat kram_key.pub >> ~/.ssh/authorized_keys
in einer Shell auszuführen.
Eine Verbindung kann dann mittels
ssh -i ~/.ssh/kram_key kraemerin@kram.example.org
aufgebaut werden.
Client Konfiguration
Auf Seiten des Client kann eine Konfiguration insbesondere über die Datei ~/.ssh/config (auf unixoiden Systemen) vorgenommen werden. Hier können etwa Aliase für Servernamen oder IPs vergeben werden, private keys und Nutzernamen zugeordnet werden. Ein Beispiel:
Host kram HostName kram.example.org User kraemerin IdentityFile ~/.ssh/kram_key Host tomate HostName tomatensuppe.kram.example.org Host eisberg.salat.example.org IdentityFile ~/.ssh/eisberg_salat_key
Nun genügen etwa
ssh kram ssh -i ~/.ssh/tomatenschluessel frische@tomate ssh gruener@eisberg.salat.example.org
um sich mit den jeweiligen Servern zu verbinden, vorausgesetzt die öffentlichen Schlüssel stehen in der jeweiligen authorized_hosts Datei und auch sonst stimmt alles.
SOCKS Proxy
Ein Proxy (dt. Vermittler*in) erlaubt es, Netzwerkverbindungen, statt auf direktem Wege zum Ziel, über einen Proxy-Server zu schicken. Der Proxy-Server ist hierbei abzugrenzen von einem normalen Netzwerkknoten (Hop). Im Gegensatz zu diesem verrät ein Proxy-Server nichts über den eigentlichen Ursprung der Anfrage (wobei deren Inhalt auf höherer Schicht das natürlich durchaus tun kann), der eigentliche Zielserver hat den Eindruck eine Anfrage direkt von dem Proxy-Server zu erhalten. Die Verbindung zwischen Client und Proxy-Server ist üblicherweise verschlüsselt.
Dies kann etwa dann nützlich sein, wenn mensch auf ein nicht vertrauenswürdiges WLAN-Netzwerk angewiesen ist. Dann erlaubt ein verschlüsselter Proxy, mit dem Internet zu interagieren, ohne daß etwa der Operator des lokalen WLAN Netzes mehr mitbekäme als wohin der Proxy-Tunnel führt (und wann wieviele Daten übertragen werden - Metadaten sind nicht zu unterschätzen [1]).
Achtung: Wenn mensch sich wirklich um Anonymität sorgt, ist Tor sowie der Tor Browser anzuraten.
SOCKS ist ein Proxy-Protokoll (in verschiedenen Versionen). OpenSSH, der Standard SSH Client auf den meisten unixoiden Betriebssystemen, kann einen lokalen SOCKS (5 oder 6) Proxy Server zur Verfügung stellen, der alle Anfragen über SSH an einen anderen Server weiterreicht. Aus Nutzer*innensicht stellt dann also jener andere Server den Proxy dar. Aus Anwendungssicht jedoch ist der Proxy-Server lokal.
Eine entsprechende Verbindung läßt sich aufbauen wie folgt:
ssh -TND local_port kraemerin@kram.example.org
local_port ist hierbei ein frei wählbarer lokaler Port an welchen Anwendungen sich zwecks Nutzung des Proxy via SOCKS wenden können. Als normaler Nutzer können nur nicht privilegierte Ports, also nur höhere, genutzt werden.
SOCKS Proxies werden von sehr vielen Programmen direkt unterstützt, darunter curl, Firefox und Thunderbird. Dort ist dann als Server localhost und als Port local_port anzugeben.
SSH Server des IfI
Studierende der Informatik sowie solche, die Informatik im Nebenfach studieren, das heißt über einen IfI-Account verfügen, können sich per SSH mit einigen Servern des IfI verbinden. Unter diesen findet sich je das gleiche Heimverzeichnis, welches vermutlich per NFS unter den Servern geteilt wird.
Insbesondere ist es möglich über einen #Socks Proxy sich von außen mit dem Informatiknetz und somit eines Teils des Uninetzwerkes zu verbinden.
Verfügbare Server sind:
beorn.informatik.uni-kiel.de bombadil.informatik.uni-kiel.de boromir.informatik.uni-kiel.de denethor.informatik.uni-kiel.de elendil.informatik.uni-kiel.de eomer.informatik.uni-kiel.de gimli.informatik.uni-kiel.de legolas.informatik.uni-kiel.de
Netterweise listet der Server isildur.informatik.uni-kiel.de diese auf, beim Versuch, sich mit ihm per SSH zu verbinden.
Um das Verbinden zu vereinfachen kann der folgende ssh_config Eintrag nützlich sein:
Host bombadil boromir denethor Hostname %h.informatik.uni-kiel.de User stuXXXXXX Host beorn elendil eomer gimli legolas Hostname %h.informatik.uni-kiel.de User stuXXXXXX ProxyJump boromir Host git.informatik.uni-kiel.de Hostname git.informatik.uni-kiel.de User git ProxyJump boromir
Damit ist es dann möglich sich mit z.B.
ssh boromir
zu dem entsprechenden Server zu verbinden.
Siehe auch
- ssh(1) -- man page
- ssh_config(5) -- man page
- Wiki:Shell