SSH (Secure Shell) ist ein Protokoll, das ähnlich Telnet das Öffnen einer Kommandozeile auf einem entfernten Rechner erlaubt. SSH arbeitet sowohl beim Verbindungsaufbau als auch beim eigentlichen Datenaustausch verschlüsselt. Auf dem Zielrechner läuft ein SSH-Server, auf dem eigenen Rechner ein SSH-Client. Bei Unix-Betriebssystemen wie Solaris und Linux gehört SSH im Prinzip zur Standardausstattung. Für Windows bietet sich z.B. Cygwin an (Anleitung). Als Windows-Client hat sich außerdem PuTTY bewährt. Es gibt allerdings auch gute Alternativen.
Für Putty gibt es noch eine USB-Stick Variation, die die Konfigurationsdateien nicht mehr in der Registry ablegt, sondern in einzelnen Dateien.
SSH kann aber noch mehr. Nicht nur die entfernte Kommandozeile kann lokal angezeigt und bedient werden, sondern auch grafische Applikationen (X-Forwarding). Außerdem können lokale und entfernte TCP-Ports weitergeleitet werden (Portforwarding) sowie Dateien kopiert werden (über Secure Copy, kurz SCP, oder FTP über SSH, kurz SFTP).
Startet man eine SSH-Verbindung mit dem Parameter -X (oder aktiviert man in PuTTY X11 forwarding, in aktuellen Versionen zu finden unter Connection/SSH/Tunnels), werden X-Applikationen, die man über die SSH-getunnelte Kommandozeile startet, auf dem lokalen X-Server angezeigt. Dazu muss natürlich ein X-Server laufen - unter Unix/Linux kein Problem. Unter Windows gibt es mehrere Möglichkeiten, kostenlos z.B. mit Xming oder Cygwin/X. Portforwarding
Derzeit sind sechs SSH Login Rechner der RBG/ISP aktiv:
Nach dreimaligem falschen Login wird die jeweilige IP Adresse für 5 Minuten gesperrt.
Um SSH Schlüssel auf der Linux-Shell zu erzeugen:
~$ ssh-keygen -b 4096 -t rsa
~$ ssh-keygen -b 384 -t ecdsa
~$ ssh-keygen -t ed25519
Der DSA Algorithmus sollte nicht mehr verwendet werden, da seine Schlüssellänge auf 1024Bit begrenzt ist.
Dieses Vorgehen empfiehlt sich auch bei MacOS.
Maßgeblich für die Sicherheit des SSH Schlüssel, ist die Länge die in Bit angegeben wird. In der Standardeinstellung ist die Länge 1024Bit, welches nicht mehr unbedingt sicher ist. Daher sollten 2048Bit bzw. 4096Bit den Vorzug gegeben werden.
Die Länge lässt sich mittels ssh-keygen prüfen:
~$ ssh-keygen -l -f ~/.ssh/id_rsa
Die Zahl am Anfang zeigt die Länge des Schlüssels
Weitere Informationen zu SSH-Schlüsseln, findet sich auf dieser Seite.
Um von Windows aus auf die Clientssh Rechner zu gelangen, kann z. B. Putty verwendet werden.
Wenn Putty (z. B. per MSI-Installer für Windows) installiert ist, kann zur Schlüsselerzeugung das Programm PUTTYgen gestartet werden.
Unten kann die Standardeinstellung RSA eingestellt bleiben. Nun klickt man auf Generate und bewegt die Maus zufällig über die leere Fläche unter dem Fortschrittsbalken, bis dieser das Ende erreicht hat.
Nun wurde ein Schlüssel erzeugt, der über die Schaltfläche Save private key (am besten, aber nicht zwingend in C:\Users\<username>\.ssh\) gespeichert werden kann. Diese Datei darf auf keinen Fall weitergegeben werden!
Nun kopiert man den Text im Feld unter Public key for pasting into OpenSSH authorized_keys file: in die Zwischenablage. Anschließend meldet man sich in der ISP-Accountverwaltung mithilfe des HRZ-SSOs an und klickt anschließend auf die Schaltfläche SSH Public-Key registrieren. Anschließend wird eine E-Mail versendet, die einen Link enthält, mitdessen Hilfe man ein Feld bekommt, indem man einen neuen Public Key eingeben kann. In dieses fügt man nun den Schlüssel aus der Zwischenablage ein und klickt auf SSH-Key übernehmen.
Um sich unter Windows per SSH auf die Poolrechner zu schalten, startet man zunächst PUTTY.
Dort trägt man unter Host Name (or IP address) einen der oben genannten Server (z. B. clientssh1.rbg.informatik.tu-darmstadt.de) ein. Darunter wählt man SSH.
Nun wechselt man auf der linken Seite zum Abschnitt Connection → SSH → Auth und wählt unter Private key file for authentication: die zuvor gespeicherte private Schlüsseldatei aus.
Über Window auf der linken Seite kann man die nun gesetzten Einstellungen auch speichern.
Anschließend klickt man auf Open. Nun öffnet sich ein Fenster, indem man den Fingerabdruck des Servers mit dem auf dieser Webseite zu findenden abgleichen und anschließend bestätigen sollte. Ein Konsolenfenster öffnet sich. Nach Eingabe der TU-ID steht die Verbindung. Durch den Befehl exit kann diese wieder beendet werden.
Wer den Schlüssel unserer SSH Servers überprüfen möchte, kann dies mithilfe der Fingerprints. Diese lauten für die verschiedenen Images:
* buster (derzeit auf clientssh1-5)
ECDSA-256 SHA256:zeKR30Lq/eaPe7eA/cDLuL4IgnyFby1mJ5f33QsGJsQ ED25519-256 SHA256:sQ4CSPUgAAEpdB711AyfnsnRKV/jfoy7uK+LK4OE8pM RSA-2048 SHA256:QBDFW3W5ICxvkbPr3zFHqwE3xLzupEqKYTbGIksQTxo
* arm (clientssh-arm):
ECDSA-256 SHA256:JqsPhgaeQmQff9wHnAEgDOf9NI9XNNt3yA0YU4JRcGE ED25519-256 SHA256:SxplNENSJpd166uoqOVgFYaLtReCrh/sEutx3m37Fz8 RSA-2048 SHA256:bFOBv3pYwIGgTfnxDv0UHEInlLmblCw8meVRDhZWd7k
Um den öffentlichen Schlüssel zu hinterlegen, gibt es zwei Möglichkeiten:
Zum Thema SSH-Tunnel hat Thomas Binder bereits eine ausführliche Anleitung geschrieben, die auch die Erzeugung und Benutzung von RSA-Schlüsseln als Ersatz für die Passwort-Authentifizierung beinhaltet.
In PuTTY findet sich der Dialog zur Einstellung von Portforwarding in aktuellen Versionen unter Connection/SSH/Tunnels. Dazu macht man folgenden Einstellungen:
Das entspricht einem Portforwarding vom lokalen Port 8080 auf Port 80 auf dem www.informatik.tu-darmstadt.de vom entfernten Rechner aus. Gibt man nun im Browser localhost:8080www.informatik.tu-darmstadt.de ein, landet man quasi auf - aber so, als ob man von dem Rechner gekommen wäre, zu dem man die SSH-Verbindung aufgebaut hat. Das Portforwarding funktioniert natürlich nur so lange, wie die SSH-Verbindung steht. Secure Copy (SCP)
SCP erlaubt das verschlüsselte Kopieren von Dateien, wenn auf dem Zielrechner ein SSH-Server installiert ist. Das ist z.B. auf den Rechnern clientssh1 und clientssh2 der RBG/ISP der Fall. So kann man z.B. Dateien von daheim abrufen oder auf einen der Rechner in der Uni transferieren.
Befehl | Bedeutung |
---|---|
scp vortrag.pdf user@clientssh1: | kopiert vortrag.pdf (lokal) in das Home-Verzeichnis von Benutzer user (Uni) |
scp vortrag.pdf user@clientssh1:/media/tmp/user | kopiert vortrag.pdf (lokal) in das temporäre Verzeichnis von Benutzer user(Uni). Dieses muss existieren, sonst wird vortrag.pdf in user umbenannt (Uni) |
scp user@clientssh1:uebung2.pdf /tmp | kopiert uebung2.pdf vom Home-Verzeichnis des Benutzers user (Uni) nach /tmp (lokal) |
scp user1@clientssh1:info.txt user2@clientssh1: | kopiert info.txt aus dem Home-Verzeichnis von Benutzer user1 (Uni) in das Home-Verzeichnis von Benutzer user2 (Uni) |
In jedem Fall muss natürlich das Passwort der angegebenen Benutzer auf Anfrage eingegeben werden. Anstelle von clientssh1 kann auch clientssh2 benutzt werden. SFTP und FTPS
SFTP entspricht FTP über SSH. Auch diese Variante wird unterstützt. Clients sind etwa WinSCP oder gFTP (s.u.). Zu beachten ist hierbei, dass ggf. Einträge in der .bashrc und ähnlicher Dateien (z.B. .profile) dazu führen können, dass der Verbindungsaufbau fehl schlägt. Konkret können das Ausgaben mit echo oder eine andere Shell sein.
FTPS dagegen bedeutet FTP über SSL bzw. TLS. Diese Zugriffsart wird nicht unterstützt. Programme
Unter UNIX/Linux sind meist direkt die Kommandozeilenprogramme ssh für den Verbindungsaufbau (ggf. mit Portforwarding, siehe Anleitung zu SSH-Tunnels) und scp für den Dateitransfer installiert. Als grafische Alternative bietet sich gFTP (mit OpenSSL-Bindings) an; KDE-Programme wie Krusader können zudem die KIO-Slaves fish für SCP- und sftp für SFTP-Zugriffe (fish:user@host und sftp:user@host) nutzen.
Unter Windows bietet das PuTTY-Komplettpaket äquivalente Kommandozeilenprogramme für den Dateitransfer wie pscp. Wesentlich komfortabler ist allerdings das Arbeiten mit WinSCP, einer grafischen Anwendung, die neben SCP auch SFTP (nicht jedoch FTP!) unterstützt.