ich möchte gerade über eine dedizierte VM einen Remote-Zugriff(Desktop-Zugriff) auf ein für einen bestimmten Zweck dediziertes MacBook, das irgendwo in einem Büro hinter einer DSL-Leitung steht, ermöglichen. Die aufgetretenen Seltsamkeiten möchte ich hier gerade mal schildern.
Vorab: AnyDesk ist ein Teamviewerersatz, der im "Wir-ballern-Dich-mit-Werbung-zu-Kachel-Design" gestaltet ist. Also eher eine nervige Software, die halt im Vergleich zu vorgenannter Software etwas günstiger ist.
Zum Setup
Da rustdesk (OpenSource) wohl noch keinen unbeaufsichtigten Modus kann, bei mir die mitgelieferte VNC-Variante von OS X nicht funktioniert hat(habe es da mit Portforwarding des VNC-Ports versucht), habe ich da doch auf das kommerzielle AnyDesk zurückgegriffen und habe eine dedizierte VM installiert und da XRDP drauf laufen lassen. (Wichtige Erkenntnis dabei: Ich kann mich mit RDP überhaupt nur einloggen, wenn der entsprechende Benutzer noch nicht anderweitig eingeloggt ist.)
AnyDesk-Client startet nur, wenn nur ein X-Server läuft
Da ich XRDP noch nie verwendet habe, habe ich gedacht, dass ich zusätzlich noch einen normalen X-Server benötige. Das ist nicht der Fall. XRDP ist sein eigener X-Server. Wenn dann zwei X-Server da sind, dann sucht sich AnyDesk selbst einen aus - vermutlich den ersten - und das war bei mir der falsche.
Dabei bekomme ich beim starten von AnyDesk nur die Meldung "No protocol specified" und der Client startet erst gar nicht. Die Meldung wird nach Recherche angezeigt, wenn keine Berechtigung auf den X-Server da ist. Nach der Deinstallation des normalen, lokalen X-Servers hat der Client dann funktioniert.
Logging
AnyDesk loggt per Default nach $HOME/.anydesk/anydesk.trace. Das Log sieht aufgeräumt aus und ist da durchauch hilfreich. Ansonsten habe ich mir mit strace angeschaut, was das Programm so tut, wo es schreibt und liest.
Konfigurationsverzeichnisse
Nachdem ich mir dann angeschaut habe, wo AnyDesk seine Konfiguration liest und schreibt, war ich etwas überrascht:
- $USER/.anydesk : Hier liegt nur das Trace-File
- /root/.anydesk : Hier liegt wohl die normale Konfiguration (WTF!?)
- /var/lib/lightdm/.anydesk : Hier versucht das Programm erfolglos das Verzeichnis zu erstellen (WTF!?)
Nachdem ich hier eine dedizierte VM hatte, habe ich dann das Verzeichnis /root für eine Gruppe "anydesk" umgestellt und r+x gesetzt. Für /root/.anydesk habe ich auch diese Gruppe gesetzt und der Gruppe r+w+x rekursiv für das ganze Verzeichnis gesetzt.
Geschützte Konfigurationseinstellungen
Manche Konfigurationseinstellungen sind geschützt und können nur mit der GUI als root konfiguriert werden. Das finde ich grundsätzlich so auch sehr sinnvoll, dass ich als Admin, das eine oder andere vorgeben kann. Hier hatte ich den Wunsch, dass z. B. Passwörter nicht gespeichert werden können. Leider hat danach die Verbindung zum Zielsystem nicht mehr funktioniert(Es kommt einfach keine Verbindung mehr zu Stande) und ich musste die Konfiguration unter /root/.anydesk löschen und nochmal machen.
Um das als root das GUI-Programm starten zu können, wenn man keine grafische Sitzung laufen hat, muss man dies so starten:
Code: Alles auswählen
$ user=normalerbenutzer # nur zur Info
$ xhost + # Zugriffschutz für den X-Server komplett deaktivieren
$ echo $DISPLAY # nur zur Info
:10.0
$ su -
# export DISPLAY=10.0
# export XAUTHORITY=/home/normalerbenutzer/.Xauthority
# anydesk
Sonstiges
Autologin
Zuletzt habe ich für den Benutzer am Macbook auch noch ein autologin aktiviert. Ich bin mir allerdings gerade nicht mehr sicher, ob das noch nötig ist.
Kommandozeilenoptionen
Es gibt noch ein paar Kommandozeilenparameter des CLI-Programmes, die dokumentiert sind:
https://support.anydesk.com/knowledge/c ... -for-linux
Zielsystem rebooten
Manchmal hat der AnyDesk-Client beim Verbindungsaufbau auch eine Gedenkminute eingelegt, bis er mich dann doch mal nach dem Passwort gefragt hat - oder dann doch eben nicht. Zwischendurch das MacBook mal durchstarten hat hier geholfen.
SSH-Portforwarding
Damit ich das Macbook auch per CLI steuern kann, habe ich mir ein Portforwarding gebastelt, dass mir den SSH-Port mittels autossh auf eine andere VM von mir weiterleitet. Damit der dieser mit launchctl erstellte Dienst läuft, muss die Verschlüsselung(FileVault) ausgeschaltet werden. Auch Ruhezustand muss deaktiviert werden, weil sich das Laptop sonst zum schlafen hinlegt. Ansonsten habe ich da noch via homebrew autossh installiert.
Hier ist nochmal die Konfigurationsdatei für den Dienst unter MacOS dafür:
/Library/LaunchDaemons/com.ssh.mein-autossh1.plist
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ssh.mein-autossh1</string>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/autossh.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/autossh.job.out</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/autossh</string>
<!-- autossh switches -->
<string>-M</string>
<string>0</string>
<!-- ssh switches -->
<string>-N</string>
<string>-T</string>
<string>-o</string>
<string>ControlMaster no</string>
<string>-o</string>
<string>ServerAliveInterval 60</string>
<string>-o</string>
<string>ServerAliveCountMax 3</string>
<string>-p</string>
<string>12345</string>
<string>-l</string>
<string>remoteusername</string>
<string>-i</string>
<string>/var/autossh/id_rsa</string>
<string>-R</string>
<string>127.0.0.1:49225:127.0.0.1:22</string>
<string>remote-host.domain.tld</string>
</array>
</dict>
</plist>