
Ich finde es seltsam, dass bei Verwendung einer SSH-Verbindung mit X11-Weiterleitung ein Benutzer und Root sehen können xclock
, ein anderer Benutzer dies jedoch nicht sieht. Warum?
mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$
PS: bedeutet, dass ich das Fenster ^C
sehen konnte , also habe ich gedrückt , um zum Terminal zurückzukehren.xclock
^C
Antwort1
Für die Verbindung mit einem X11-Display sind zwei Informationen erforderlich: der Displayname (normalerweise in der DISPLAY
Umgebungsvariable übergeben) und diePlätzchen, ein Kennwort für die Anzeige, das jede Anwendung beim Verbinden anzeigen muss. Normalerweise wird das Cookie in gespeichert ~/.Xauthority
, es kann aber auch in einer anderen Datei gespeichert werden, die durch die XAUTHORITY
Umgebungsvariable angegeben wird.
Es scheint, dass der von SSH festgelegte Wert DISPLAY
von durch die beiden Aufrufe von beibehalten wurde su
. Das Cookie befindet sich jedoch in ~mahmood/.Xauthority
; wenn Sie ein Programm als hmousavi ausführen, sucht das Programm nach einem Cookie in ~hmousavi/.Xauthority
und findet einen anderen Wert.
Im Prinzip könnten Sie ausführen XAUTHORITY=~mahmood/.Xauthority xclock
, aber hmousavi hat vermutlich nicht die Berechtigung, diese Datei zu lesen – die .Xauthority
Datei sollte für andere Benutzer nicht lesbar sein. Sie können den xauth
Befehl zweimal verwenden, einmal als mahmood, um den Cookie-Wert zu extrahieren ( xauth list localhost:10.0
) und einmal als hmousavi, um diesen Wert zu importieren ( xauth merge
), aber das ist umständlich. Der einfachste Weg, X11-Anwendungen zum Laufen zu bringen, ist, durchgehend SSH zu verwenden, da SSH die X11-Weiterleitung automatisch einrichtet:
mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock
Fügen Sie den öffentlichen SSH-Schlüssel von Mahmood zu dem von Hmousavi hinzu, .ssh/authorized_keys
um dies zu ermöglichen.