Remotezugriff
- Einrichtung
- SSH-Verbindung mit einem Server
- Zusätzliche Keys eintragen
- Dateien kopieren
- Port Forwarding
- PuTTY (für alte Windowsversionen)
Zur Sicherheit sind nicht alle Rechner außerhalb des Lehrstuhlnetzwerks verfügbar. Um trotzdem auf diese von außen
zuzugreifen, muss man sich zunächst per SSH mit login6.informatik.uni-wuerzburg.de
(einem sogenannten
Sprungbrettrechner) verbinden. Über diesen kann auf alle Maschinen im Lehrstuhlnetz zugegriffen werden.
Einrichtung
Unter Linux enthält üblicherweise das Paket openssh
alle notwendigen
Programme. Unter Windows ist OpenSSH inzwischen auch standardmäßig installiert,
falls nicht, siehe Installationsanleitung von Microsoft.
Im folgenden werden die Linux-Pfade für die OpenSSH-Konfiguration benutzt, unter Windows sollten diese identisch sein bis auf spiegelverkehrte /
.
Für ältere Windows-Versionen kann putty genutzt werden, siehe unten
SSH-Key generieren.
Anstatt eines Logins per Passwort empfehlen wir, ein SSH-Schlüsselpaar zu erzeugen, mit dem die Authentifizierung erfolgen kann. Für neue Studentenaccounts wird nur diese Authentifizierung erlaubt.
Der folgende Befehl startet die Schlüsselgenerierung, einfach den Anweisungen folgen. Wählt für den Schlüssel ein sicheres Passwort! Das Passwort wird zur lokalen Verschlüsselung benutzt, d.h. der Server kennt das Passwort nicht und wir können es auch nicht zurücksetzen.
% ssh-keygen -t ed25519
Wenn ihr die Default-Einstellungen im Dialog beibehalten habt, solltet ihr nun zwei Dateien in eurem Homeverzeichnis finden:
~/.ssh/id_ed25519 # private key
~/.ssh/id_ed25519.pub # public key
Prinzipiell könnt ihr diesen Schlüssel auf mehreren Rechnern verwenden, ihr könnt aber auch für jeden Rechner einen eigenen Schlüssel generieren. Abgesehen vom ersten Schlüssel zur Accounterstellung könnt ihr diese selbst eurem Account hinzufügen oder entfernen (siehe unten).
SSH-Verbindung mit einem Server
Im Folgenden wird exemplarisch eine SSH-Verbindung mit den Rechnern slurmmaster-ls6
und grishnakh
aufgebaut (siehe auch Rechencluster).
Dafür konfigurieren wir login6.informatik.uni-wuerzburg.de
als SSH Proxy.
Erstellt eine SSH-Configdatei unter ~/.ssh/config
, falls diese noch nicht existiert (unter Windows ist das
C:\Users\<benutzername>\.ssh\config
, keine Dateiendung).
Öffnet die Datei mit einem Texteditor und tragt folgendes ein, wobei ihr <USERNAME>
durch euren
Lehrstuhl-Benutzernamen (siehe Mail) ersetzt:
Host login6
HostName login6.informatik.uni-wuerzburg.de
User <USERNAME>
IdentityFile ~/.ssh/id_ed25519 # Anpassen, falls unter anderem Namen
# Weitere Zielserver einfach in dieser Zeile hinzufügen
Host slurmmaster-ls6 grishnakh
HostName %h.informatik.uni-wuerzburg.de
User <USERNAME>
IdentityFile ~/.ssh/id_ed25519 # Anpassen, falls unter anderem Namen
ProxyJump login6
Danach kann die Verbindung mit diesem Befehl aufgebaut werden:
ssh slurmmaster-ls6
Namen weiterer Server können einfach nach slurmmaster-ls6
und grishnakh
hinzugefügt werden.
Alternative Konfiguration für alte OpenSSH Versionen
Für Versionen von OpenSSH (vor 7.3), die die Option ProxyJump
noch nicht enthalten, muss die Zeile mit dieser durch folgendes ersetzt werden:
ProxyCommand ssh -x -T login6 -W %h:22
Zusätzliche Keys eintragen
Für neue Accounts, die kein Passwort haben, ist dieser Abschnitt nur beim Hinzufügen zusätzlicher Keys relevant. Der Key, der beim Accountantrag mitgeschickt wurde, wird automatisch eingerichtet.
Die Registrierung eines Schlüssels erfolgt bei SSH über eine Konfigurationsdatei im Home-Verzeichnis des Zielrechners. Da der Sprungbrettrechner nicht zum Arbeiten genutzt werden soll, sind die Home-Verzeichnisse dort jedoch nicht schreibbar. Um für den Login einen SSH-Key zu verwenden, muss dieser im Homeverzeichnis auf einem beliebigen anderen Server eingetragen werden. Dieser wird dann nach spätestens 10 Minuten automatisch auch auf dem Sprungbrettrechner verfügbar.
Manuelle Eintragung
Der Public Key muss im OpenSSH-Format (s.u) in die Datei ~/.ssh/authorized_keys
auf einen Rechner mit schreibbarem
Home eingetragen werden (z.B. slurmmaster-ls6
, grishnakh
). Dies enspricht dem Inhalt der im vorherigen Schritt
erstellten .pub-Datei:
# ~/.ssh/authorized_keys
# $algorithmus $key $kommentar
# z.B.
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA/LAmAYK0LoQx8fA/PJvNOhxYh7cIr3ZdMqFuCglM4d Demo-Key für Wiki
Automatisches Kopieren mit ssh-copy-id (nur OpenSSH)
Um Keys mittels ssh-copy-id zu übertragen, erst SSH entspreched konfigurieren. Anschließend ist die automatische Übertragung möglich:
% ssh-copy-id slurmmaster-ls6
Dateien kopieren
Um Dateien zwischen dem lokalen Rechner und Servern zu kopieren, gibt es verschiedene Möglichkeiten. Für die meisten hiervon ist die obige Konfiguration Voraussetzung.
storage-ls6
!SFTP
Mittels sftp $host
erhält man eine SFTP-Shell, welche nur Befehle zur Dateiübertragung unterstützt. Hier eine Auswahl der wichtigsten:
-
cd
wechselt das Verzeichnis auf dem Server -
ls
listet die Inhalte des aktuellen Verzeichnisses auf -
pwd
gibt aus, in welchem Verzeichnis man sich aktuell befindet -
lcd
,lls
undlpwd
tun das selbe für das lokale Verzeichnis -
get
undput
übertragen die angegebene Datei ins aktuelle lokale bzw. remote Verzeichnis.
Für mehr Befehle, siehe die sftp manpage oder dieses Tutorial.
SCP
Mit scp
kann man Dateien und Verzeichnisse wie mit dem lokalen cp
-Befehl kopieren. Um hierbei einen Pfad auf dem
Server anzugeben, muss der Server mit einem :
getrennt vor den Pfad geschrieben werden. Zum Kopieren von
Verzeichnissen muss -r
mit angegeben werden. Um zum Beispiel den Ordner myDataset
ins Scratchverzeichnis zu kopieren:
scp -r myDataset/ storage-ls6:/storage/scratch/myfolder/
SSHFS
Mit sshfs
kann ein Verzeichnis auf dem Server als lokales Dateisystem gemountet werden (derzeit nur Linux, es
existert ein Windows-Port, jedoch funktionert dieser bisher anscheinend
nicht über Proxys).
Die Syntax ist ähnlich wie bei scp
. Um das eigene Homeverzeichnis lokal unter ~/mnt/ls6home einzuhängen:
sshfs storage-ls6:~/ ~/mnt/ls6home
Port Forwarding
Um andere Netzwerkanwendungen als SSH auf Servern zu erreichen, die nicht nach außen freigegeben sind, könnt ihr SSH zum Tunneln benutzen. Hierzu ist kein SSH-Zugang auf dem Rechner mit dem offenen Port nötig, der Server muss nur im Lehrstuhlnetz sein. Allerdings muss die Anwendung auch Verbindungen von anderen Rechnern auf dem Port zulassen (Beispiel für Jupyter-Notebooks siehe unten).
Angenommen ihr habt einen Service unter meine-vm.informatik.uni-wuerzburg.de laufen, der aber von außen nicht erreichbar ist, z.B. weil er noch kein Zertifikat hat oder er nur temporär läuft.
ssh -N -L 8080:meine-vm.informatik.uni-wuerzburg.de:80 login6
-
-N
verhindert, dass eine Shell gestartet wird -
-L
richtet eine lokale Portweiterleitung ein, mit Doppelpunkten getrennt:- zuerst der Port, auf den wir dann lokal zugreifen wollen, hier 8080
- dann der Server, zu dem wir den Tunnel aufbauen wollen
- dann der Port auf dem Zielserver
- Zuletzt noch der Server, der den Tunnel zur Verfügung stellt, hier unser Loginserver. Auf diesem brauchen wir SSH-Zugang und der Zielserver muss von diesem aus erreichbar sein.
Der Befehl öffnet in dieser Form keine Shell, d.h. es erscheint nicht wie bei einer normalen SSH-Verbindung eine
Eingabeaufforderung. Solange der Prozess läuft, sollte nun unter http://localhost:8080
der HTTP-Server auf
meine-vm.informatik.uni-wuerzburg.de erreichbar sein.
Jupyter-Notebooks auf Slurm Nodes
Das ganze funktioniert natürlich auch für andere Protokolle, indem man die Ports entsprechend anpasst, z.B. Jupyter-Notebooks auf den Slurm Hosts. Hier müsst ihr beachten, dass ihr euer Jupyter-Notebook anweist, auch auf Verbindungen von anderen Rechnern aus zu hören. Hierzu gibt es zwei Möglichkeiten:
-
Variante 1: Startparameter: Beim Start des Notebooks, gebt
jupyter notebook --ip 0.0.0.0
mit an. -
Variante 2: Via Configdatei: Bearbeitet die
jupyter_notebook_config.py
(falls nicht vorhanden, kann diese mitjupyter server --generate-config
generiert werden) und fügt folgende Zeilen hinzu bzw. entfernt das#
von den entsprechenden Kommentaren und passt die Werte an:c.NotebookApp.allow_origin = '*' #allow all origins c.NotebookApp.ip = '0.0.0.0' # listen on all IPs
PuTTY (für alte Windowsversionen)
Schlüsselgenerierung
- Startet das Programm PuTTYgen (sollte mit PuTTY installiert worden sein) und klickt auf “Generate”.
- Fahrt mit der Maus so lange über die graue Fläche unter dem Ladebalken, bis dieser voll ist.
- Kopiert den Inhalt im Feld unter “Public key for pasting into OpenSSH authorized_keys file:” in eine neue Datei namens
key.pub
. - Klickt auf “Save private key” und speichert den privaten Schlüssel unter
key
. - Danach wie unter Key eintragen fortfahren.
Tunnel
Im Folgenden wird eine PuTTY Session erstellt, die es ermöglicht eine weitere Verbindung zu slurmmaster-ls6
herzustellen.
- Startet PuTTY
- Rechts seht ihr eine Übersicht, links die Einstellungen.
- Übersicht: Connection > Data
- Auto-login username auf den Benutzernamen setzen, den ihr per E-Mail erhalten habt
- Übersicht: Connection > SSH
- Don’t start a shell or a command at all markieren.
- Übersicht: Connection > SSH > Auth
- Private key file for authentication: auf die Datei private.ppk setzen.
- Übersicht: Connection > SSH > Tunnels
-
Source port auf
22
setzen. -
Destination auf
132.187.15.222:22
setzen (132.187.15.222
ist die IP vonslurmmaster-ls6
). - Auf Add klicken.
-
Source port auf
- Übersicht: Session
-
Host Name (or IP address) auf
login6.informatik.uni-wuerzburg.de
setzen. -
Saved Sessions auf
LS6 - slurmmaster-ls6 - Tunnel
setzen. - Auf Save klicken.
-
Host Name (or IP address) auf
- Zum Verbinden auf Open klicken.
Dies öffnet nur den Tunnel, aber noch keine Verbindung zum eigentlichen Zielserver.
Verbindung
- Startet die Session aus dem vorherigen Abschnitt.
- Startet PuTTY nocheinmal (die andere Session dabei laufen lassen).
- Übersicht: Connection > Data
- Auto-login username auf den Benutzernamen setzen, den ihr per E-Mail erhalten habt
- Übersicht: Connection > SSH > Auth
- Private key file for authentication: auf die Datei private.ppk setzen.
- Übersicht: Session
-
Host Name (or IP address) auf
localhost
setzen. -
Saved Sessions auf
LS6 - Verbindung
setzen. - Auf Save klicken.
-
Host Name (or IP address) auf
- Zum Verbinden auf Open klicken.
- Jetzt solltet ihr mit dem Zielserver
slurmmaster-ls6
verbunden sein. Für einen anderen Server muss nur eine weitere Session entsprechend dem Abschnitt Tunnel angelegt werden, die Verbindungssession kann gleich blieben.