Remote arbeiten

Neben der physischen Anwesenheit im Labor ist auch eine Bearbeitung der Aufgaben von zu Hause aus möglich. Folgende Anleitung gibt einen Überblick über die Möglichkeiten des Remote-Zugriffs auf das SRA-Labor.

Für die Bearbeitung der Rechnerübungsaufgaben sind alle benötigten Werkzeuge im Labor vorinstalliert. Die Laborrechner sind über SSH und VNC erreichbar. Die Einrichtungsdetails finden sich weiter unten. Ihr könnt die Aufgaben natürlich auch auf eurem eigenen Rechner bearbeiten, wir empfehlen hierzu den Einsatz von Linux. Weiter unten finden sich einige Hinweise, wie ihr euren Linux-Rechner entsprechend konfigurieren könnt.

TL;DR

SSH und VNC in unseren Laborrechner ist verfügbar.

$ ssh lin.trovalds@lab.sra.uni-hannover.de -p 2205   # für lab-pc05

Geteiltes TMUX:

$ tmux -S /tmp/my-shared-tmux new                       # tmux session erstellen
$ setfacl -m "u:lin.torvalds:rw" /tmp/my-shared-tmux    # Linus Trovalds Zugriff geben

$ tmux -S /tmp/my-shared-tmux attach                    # auf die Session verbinden (vom anderen auszuführen)

Für den eigenen PC:

$ apt install qemu qemu-system-x86 qemu-kvm build-essential binutils

SSH

Um SSH zu verwenden, braucht ihr eine Rechnernummer. Nehmt dazu eure Gruppennummer modulo 10 (um ein bisschen Loadbalancing hinzubekommen). Geht dann auf:

$ ssh <euer_login_name>@lab.sra.uni-hannover.de -p 22<rechnernummer>

D.h., für Linus Torvalds wäre der Login für Rechner 5:

$ ssh lin.torvalds@lab.sra.uni-hannover.de -p 2205

Umgang mit SSH-Keys

Bei der Arbeit mit Git-Remotes bietet sich die Verwendung von SSH-Keys an. Dazu erzeugt ihr per ssh-keygen einen Schlüssel, z.B. so:

$ ssh-keygen -t ed25519

Entweder der Schlüssel wird als ~/.ssh/id_ed25519 (also in eurem Home) im versteckten Verzeichnis .ssh abgelegt, oder ihr gebt ihm einen anderen Namen. id_ed25519 wird standardmäßig von ssh benutzt, andere Namen existieren für ssh zunächst nicht. Diese müsst ihr dem ssh-agent bekanntmachen, indem ihr Folgendes ausführt:

$ eval $(ssh-agent)        # ssh-agent starten
$ ssh-add ~/.ssh/gitlab    # den Key mit dem Namen gitlab bekanntmachen

Beim zweiten Schritt werdet ihr u.U. nach dem Passwort gefragt, was ihr bei der Key-Erzeugung angegeben habt.

Ab dem Zeitpunkt (wenn ihr den öffentlichen Schlüssel im Gitlab bekannt gemacht habt), könnt ihr einfach alle git-Kommandos ausführen. Die Authentifizierung läuft ab dann über die Schlüssel und ihr müsst keine Passworte (mehr) eingeben.

SSH-Config

Wir empfehlen die Eintragung der Laborrechner in die lokalen SSH-Config. Dazu muss in der Datei ~/.ssh/config dieser Eintrag hinzugefügt werden:

host lab-pc01   # Man kann dem Host einen beliebigen Namen geben 
  HostName lab.sra.uni-hannover.de
  User lin.torvalds
  Port 2201
  ForwardX11 yes
  ServerAliveInterval 30

Bitte dabei Rechnernamen und Portnummer für den speziellen Rechner anpassen.

Wenn Key und SSH-Config eingerichtet sind, kann man sich einfach per ssh lab-pc01 zum SRA-Rechner verbinden.

Geteiltes TMUX

Für das gemeinsame Arbeiten kann man tmux verwenden, um eine TTY-Session mit einem anderen Benutzer zu teilen. Wir verwenden diesen Mechanismus zudem für die Remote-Abgaben. Die beiden Benutzer können damit dasselbe Terminal sehen und bearbeiten. Außerdem arbeitet tmux sessionbasiert, d.h. man teilt nicht nur ein Terminal, sondern eine ganze Session, konkret beliebig viele Terminals und ihren Zustand und Layout.

Zur Einrichtung erstellt man eine tmux -Session unter Angabe eines Sockets (-S / -L):

$ tmux -S /tmp/my-shared-tmux new

Damit wird ein tmux-Server erzeugt, falls noch keiner auf dem Socket lauscht. (Der Socket-Name my-shared-tmux sollte durch einen eigenen Namen ersetzt werden)

Mit der Option -s session-name (hinter new) kann der Session auch noch ein eigener Name zugewiesen werden (Standard: "0").

Nun können weitere Nutzer bzw. tmux-Instanzen mit der Session verbunden werden:

$ tmux -S /tmp/my-shared-tmux attach

Gegebenenfalls muss mit der Option -t session-name die Session identifiziert werden. Ein Detach wird mit der Tastenfolge Ctrl-b d gemacht.

Damit ein anderer Benutzer ein Attach durchführen kann, muss er entsprechende Rechte am Socket haben, was mittels ACLs bewerkstelligt werden kann:

$ setfacl -m "u:other.user:rw" /tmp/my-shared-tmux

(Wobei other.user mit dem Usernamen des Partners ersetzt wird.)

Bitte seid bei der Erteilung der Rechte vorsichtig und verwendet dafür im Labor keine UNIX-Gruppenberechtigungen. Bedenkt, dass jeder in einer solchen Gruppe dann vollen Zugriff auf eure tmux-Session hat.

Für weitere Informationen siehe die offizielle tmux-Doku oder die Manpage von tmux.

SSHFS

Wenn ihr (lokal) einen grafischen Editor benutzen wollt, aber trotzdem auf dem Laborrechner arbeieten wollt, bietet es sich an, das Labor per SSHFS zu mounten.

Prinzipiell reicht es dazu, so etwas auszuführen:

$ mkdir sra-mount
$ sshfs lab-pc01: sra-mount
$ cd sra-mount

VNC

VNC ist eine Technik, um eine Desktopoberfläche über Fernzugriff zu benutzen. Das könnt ihr benutzen, um die X11-Fenster von Qemu zu nutzen oder einen der grafischen Editoren im Labor zu nutzen.

Achtung: VNC braucht eine stabile hohe Datenrate. Wir empfehlen daher die reine Konsolen-Benutzung über SSH.

VNC greift im Normalfall auf eine laufende Session zu. Diese ist im Labor für euren Nutzer aber nicht vorhanden. Folglich müsst ihr zusätzlich zu dem VNC-Server auch noch eine Session starten. Dazu legt ihr ein Shellscript ~/.vnc/xstartup an (über die Kommandozeile geht das z.B. mit dem Editor nano). In dem Shellscript startet ihr eure Session, z.B. (nur eine der Zeilen sollte einkommentiert sein!):

1
2
3
4
#!/bin/sh
/usr/bin/startkde &          # KDE
#/usr/bin/gnome-session &    # GNOME
#/usr/bin/startxfce4 &       # XFCE4

Der VNC-Server wird dann diese Datei benutzen, um eine neue Session zu starten. Anschließend könnt ihr auch schon direkt den VNC-Server starten:

$ tigervncserver -useold -localhost

Der Server fragt nun nach einem Passwort (das schützt eure Session) und gibt nach dem Start eine Desktopnummer aus, die ihr später zum Verbinden braucht. Um die Session wieder zu schließen, wird folgender Befehl benutzt:

$ tigervncserver -kill :<desktopnummer>

Bitte geht dabei verantwortungsbewusst mit den Ressourcen um. Unter Linux ist die Verbindung mit dem VNC-Servier z.B. mit dem VNCViewer möglich:

$ xtigervncviewer -passwd <password-file> -via <ssh-kennung> localhost:<bildschirmnummer>

muss dabei ein Eintrag aus der SSH-Config sein. Technisch müsst ihr einen SSH-Tunnel zum VNC-Port aufbauen und euch dann mit dem Server verbinden. Dieser VNC-Port unterscheidet sich pro gestarteter Instanz. Ihr könnt ihn per netstat -tulpen nachschauen (Der standard ist 5900). Das -via Argument macht das alles implizit. Die Passwort-Datei (.vnc/passwd) muss dabei auf den Client-PC kopiert werden. Unter manchen Distributionen wird der xtigervncviewer auch als vncviewer ausgeliefert. Bspw.:

$ xtigervncviewer -SecurityTypes VncAuth -passwd /home/lin.torvalds/.vnc/passwd -via lab-pc01 localhost:2

Damit die Kennung lab-pc01 funktioniert, muss eine entsprechende SSH-Config angelegt werden (siehe oben).