Ssh -X, xauth und kein $HOME

Hi,

wie funktioniert das mit dem X11 forwarding via SSH eigentlich genau? Man tippert ja ssh -X oder wenn das streikt ssh -Y (wobei ich mich schon immer fragte, was genau der Unterschied ist, die man page schreibt da nur irgendwas von „X11 forwarding is subjected to X11 SECURITY extension restrictions“), das fuehrt dann auf dem remote host irgendwas mit xauth aus, vermutlich xauth generate und erzeugt ein neues magic cookie fuer die Authentifizierung am XServer. Das cookie wird scheinbar nicht am lokalen XServer registriert. Den XServer „simuliert“ ssh gleich auch noch an irgendwas wie localhost:10.0 und leitet alle Verbindungen an diesen irgendwie auf den lokalen um. Soweit die Bruchstuecken, die ich verstanden habe.

Hintergrund: ich brauche die Ausgaben eines X11 clients auf einem remote host, auf dem ich kein home directory habe. Das erwaehnte xauth mault also einfach nur rum, dass es das ~/.Xauthority nicht anlegen kann. Damit kann kein X11 client das cookie finden und sich also auch nicht am XServer (dem vom ssh) authentifizieren. Ich wuerde daher die Schritte, die ssh nach der Anmeldung automatisch durchfuert, manuell, nach Setzen von XAUTHORITY auf eine guenstigere Position (z.B. im /tmp), ausfuehren. Wenn ich nur wuesste, welche. Mir ist nur gelungen, das magic cookie meines lokalen XServers mittels xauth zu importieren (mit dem merge-Kommando zu xauth) und anschliessend DISPLAY auf meinen lokalen Rechner zu setzen, aber dann geht die X11-Verbindung natuerlich nicht mehr via SSH sondern direkt und unverschluesselt.

Irgendeine Idee, wie ich das hinkriege?

Danke im Voraus,
Gruss vom Frank.

Hallo Frank,

Man tippert ja ssh -X oder wenn das streikt ssh -Y
(wobei ich mich schon immer fragte, was genau der Unterschied
ist, die man page schreibt da nur irgendwas von „X11
forwarding is subjected to X11 SECURITY extension
restrictions“)

da hast Du ja schon die Antwort selbst gegeben, wie diese Restriktionen lauten, kannst Du hier nachlesen:
http://www.xfree86.org/current/security.pdf
was aktuelleres habe ich nicht gefunden, ich hoffe also das trifft alles noch zu. Bey -Y werden die dann umgangen. Aber das ist für dein Problem eher von untergeordneter Bedeutung.

Hintergrund: ich brauche die Ausgaben eines X11 clients auf
einem remote host, auf dem ich kein home directory habe. Das
erwaehnte xauth mault also einfach nur rum, dass es das
~/.Xauthority nicht anlegen kann.
Ich wuerde daher die Schritte, die ssh
nach der Anmeldung automatisch durchfuert, manuell, nach
Setzen von XAUTHORITY auf eine guenstigere Position (z.B. im
/tmp), ausfuehren.
Irgendeine Idee, wie ich das hinkriege?

Der Ansatz klingt doch schon vielversprechend. Du extrahierst deinen Magic Cookie und transferierst ihn auf die andere Maschine:

xauth extract - $DISPLAY | rsh otherhost xauth -f /passendes/verzeichnis/authfile merge -

wobei Du mit der Option -f ein anderes als das nicht existierende Homeverzeichnis angeben kannst. Ob DISPLAY auch den Rechnernamen enthalten darf oder muss, also z.B. DISPLAY=ROSE:0 weiss ich jetzt nicht. Probiere es mal aus.
Anschliessend sollte es mit dem X-forwarding funktionieren. Aber ausprobiert habe ich es mangels einer passenden remote-Maschine nicht.

Viele Grüße
Marvin

Off Topic

Aber ausprobiert habe ich es mangels einer passenden
remote-Maschine nicht.

Um das auszuprobieren sollte ein ssh auf 127.0.0.1 ausreichen.

Gruß

[ssh -X vs. ssh -Y]

http://www.xfree86.org/current/security.pdf

Ah, Mist. Erster Treffer im google. Verdammt…

Hintergrund: ich brauche die Ausgaben eines X11 clients auf
einem remote host, auf dem ich kein home directory habe. Das
erwaehnte xauth mault also einfach nur rum, dass es das
~/.Xauthority nicht anlegen kann.
Ich wuerde daher die Schritte, die ssh
nach der Anmeldung automatisch durchfuert, manuell, nach
Setzen von XAUTHORITY auf eine guenstigere Position (z.B. im
/tmp), ausfuehren.
Irgendeine Idee, wie ich das hinkriege?

Der Ansatz klingt doch schon vielversprechend. Du extrahierst
deinen Magic Cookie und transferierst ihn auf die andere
Maschine:

xauth extract - $DISPLAY | rsh otherhost xauth -f
/passendes/verzeichnis/authfile merge -

wobei Du mit der Option -f ein anderes als das nicht
existierende Homeverzeichnis angeben kannst. Ob DISPLAY auch
den Rechnernamen enthalten darf oder muss, also z.B.
DISPLAY=ROSE:0 weiss ich jetzt nicht.

Ja, muss man. Und das baut eine direkte Verbindung zwischen dem remote X client und dem lokalen XServer auf, ohne durch SSH zu gehen. Die ist also nicht verschluesselt.

Aber ausprobiert habe ich es mangels einer passenden
remote-Maschine nicht.

Wie herrmann schon bemerkte, brauchst Du keinen remote host.

 % sudo /usr/sbin/useradd -d / fred

tut’s auch, da der sein $HOME im / hat, kann er da kein ~/.Xauthority erstellen. Ein

 % ssh -Yl fred localhost

simuliert das dann schon ganz gut. Noch ein

 % sudo tcpdump -ni lo port 6000

in einer zweiten shell und dann soll fred mal ein xterm aufmachen, ohne, dass tcpdump rumblubbert.

Weiter dankbar fuer Ideen,
Gruss vom Frank.

Hallo Frank,

Wie herrmann schon bemerkte, brauchst Du keinen remote host.

% sudo /usr/sbin/useradd -d / fred

tut’s auch, da
der sein $HOME im / hat, kann er da kein ~/.Xauthority
erstellen.

An localhost hatte ich dann auch gedacht. Aber ich konnte mir partout nicht vorstellen, wo ich den User herkriegen soll, der kein Homeverzeichnis in /home hat. Der einfache, aber geniale Trick mit useradd -d / wäre mir nie eingefallen. Chapeau!

Viele Grüße
Marvin