ssh -X funktioniert nicht auf Yosemite

Kann X11 nicht mehr mit ssh verwenden. Habe XQuartz2.7.7 installiert. Die Anmeldung mit X11 über ssh gibt die Warnungen aus

Warnung: Einrichtung der nicht vertrauenswürdigen X11-Weiterleitung fehlgeschlagen: Xauth-Schlüsseldaten nicht generiert Warnung: Keine xauth-Daten; Verwendung gefälschter Authentifizierungsdaten für die X11-Weiterleitung.

In meinem eigenen System echo $DISPLAYgibt

/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0

Wenn ich es jedoch versuche xauth generate $DISPLAY . trusted, bekomme ich den Fehler

xauth: (argv):1: falscher Anzeigename „/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0“ im „add“-Befehl

Irgendwelche Ideen, wie man das beheben kann?

Der von zurückgegebene Anzeigename $DISPLAYist falsch. Es sollte so etwas wie sein :0.0. Setzen Sie ein $DISPLAYoder ~/.bash_profilesich ~/.profileselbst?
Macht es einen Unterschied, wenn Sie die -YOption anstelle von verwenden -X? Welches Betriebssystem verwendet Ihr Server? Und: Auf einem Mac ist es völlig normal $DISPLAY, etwas eingestellt zu haben ./tmp/
@jaume Ich setze keine eigene $DISPLAY-Variable. Manuelles Ändern scheint es jedoch behoben zu haben. Ich bin mir immer noch sicher, wie es zu dem wurde, was es war.
Hast du in der Zwischenzeit dein Terminal neu gestartet? Das hat mir in der Vergangenheit bei seltsamen Problemen mit Umgebungsvariablen geholfen…
@Asmus Ich hatte zuvor Terminal neu gestartet und den Computer viele Male ohne Erfolg neu gestartet. Ich verwende OS X 10.10.2. Alles, was ich tat, war so etwas wie DISPLAY=:0.0, und es funktionierte. Ich habe dies zu meinem .bash_profile hinzugefügt
Nein, bitte nicht $DISPLAYmanuell einstellen. Schauen Sie sich an, was man sshüber die X11-Weiterleitung gesagt wird: The user should not manually set DISPLAY.Dies ist ein potenzielles Sicherheitsrisiko!
Was soll ich dann tun? Es scheint auch so, als ob die Einstellung $DISPLAYim bash_profile nicht funktioniert. Das Symptom ist wie folgt: ssh mit dem Original $DISPLAY=/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0startet X11, aber es gibt den Fehler und die X11-Weiterleitung funktioniert nicht. Beenden Sie ssh und setzen Sie $DISPLAYauf zurück :0.0, versuchen Sie es erneut ssh -Xund es funktioniert
Die Warnung, die Asmus oben ( The user should not manually set DISPLAYin man ssh) erwähnt, gilt für den Computer, mit dem Sie sich verbinden . Der Grund dafür ist, dass die DISPLAY-Variable auf dem Remote-Computer für Sie so eingestellt wird, dass der X11-Verkehr die verschlüsselte Verbindung sshdurchläuft . sshUnd man sshwarnt Sie: Verändern Sie es nicht! Aber Sie müssen DISPLAY auf Ihrem Mac einstellen, damit es funktioniert. Fügen Sie diese Zeile zu ~/.bash_profile: hinzu export DISPLAY=:0.0, testen Sie sie und melden Sie sich zurück.
Wenn Sie also diese Zeile hinzufügen, wird ~/.bash_profileimmer noch der Fehler "Setup fehlgeschlagen" angezeigt. Allerdings, wie ich oben erwähnt habe, ist eine interessante Sache, dass, wenn ich einfach DISPLAYdas Gleiche lasse, dh. behalte es bei /private/tmp/com.apple.launchd.crAjK9o5ak/org.macosforge.xquartz:0, mache ssh -X, beende ssh und führe es dann aus export DISPLAY=:0.0oder einfach DISPLAY=:0.0, X11 funktioniert mit ssh und ich kann GUI-Anwendungen vom Server ausführen
Nachdem Sie die export DISPLAY=:0.0Zeile hinzugefügt ~/.bash_profilehaben, müssen Sie ein neues Terminalfenster öffnen, damit die Änderungen wirksam werden. Alternativ müssen Sie es . ~/.bash_profilein Ihrer aktuellen Shell ausführen, um es zu beziehen. Hast du das gemacht? Wenn es immer noch nicht funktioniert, können Sie alias ssh="DISPLAY=:0.0; ssh"hinzufügen ~/.bashrc.
Genau das habe ich getan, aber die Ergebnisse sind wie oben beschrieben. Es scheint, als ob ssh die DISPLAY-Variable benötigt, um beim Herstellen der Verbindung zuerst die ursprüngliche zu sein und dann auf den Wert :0.0 geändert zu werden, nachdem ...
Hast du den Alias ​​probiert? Starten Sie XQuartz als Login-Item?
@stakSmashr OK...
@stakSmashr Ich habe eine Antwort mit einer Beschreibung des Problems, einigen Informationen darüber, wann dieser Fehler behoben werden kann, und zwei Problemumgehungen hinzugefügt, die von Ihnen getestete und eine andere.
@stakSmashr Ich habe endlich Zeit gefunden, XQuartz zu installieren und die zweite Problemumgehung zu testen. Es funktioniert, ich habe einen Screenshot hinzugefügt. Ich habe auch die erste Problemumgehung entfernt. Vielleicht möchten Sie es versuchen.
danke, aber es schien bei mir nicht zu funktionieren, ich bekomme immer noch den Fehler "$ xterm /private/tmp/com.apple.launchd.crAjK9o5ak/org.macosforge.xquartz: unknown host. (nodename nor servname provided, or nicht bekannt) xterm Xt-Fehler: Anzeige kann nicht geöffnet werden: localhost:10.0"

Antworten (1)

AKTUALISIEREN

Entwickler Jeremy Huddleston Sequoia gab gestern bekannt , dass dieses Problem in XQuartz 2.7.8_beta2 behoben ist :

XQuartz 2.7.8_beta2 steht zum Download bereit.

Unter http://xquartz.macosforge.org/trac/wiki/X112.7.8 finden Sie eine vollständige Reihe von Änderungen, aber die bemerkenswertesten sind:

1) xauth parst jetzt korrekt den Yosemite launchd $DISPLAY Socket-Pfad
2) libGL wurde auf Mesa 10.4.4 aktualisiert
3) Diverse Exploits wurden in xorg-server, freetype und libpng behoben
4) Ein Fehler hat in einigen Fällen automatische Updates verhindert behoben worden

Der Fehlerbericht wird geschlossen und als behoben markiert:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Beta nicht installieren können (oder wollen), können Sie trotzdem die Problemumgehung verwenden, die ich unten erkläre.


ANTWORTEN

Analyse

(scrollen Sie nach unten für den Abschnitt zur Problemumgehung)

Mein erster Gedanke war "die DISPLAYVariable ist falsch". Aber es ist nicht.

Wie sich herausstellt, speichert die Variable unter OS X 10.10 Yosemite (und zurück zu 10.8 Mountain Lion ) einen Socket-Pfad:DISPLAYlaunchd

/private/tmp/<socket name>

anstelle des bekannten Anzeigenamens:

hostname:displaynumber.screennumber

hostname:displaynumber.screennumber(Ich habe am Ende dieser Antwort einige Informationen zum Format hinzugefügt .)

Das bedeutet, dass xauthman mit dieser speziellen Inkarnation der DISPLAYVariable umgehen muss, und ab Mavericks tat es das auch, aber der in Yosemite verwendete Socket hat einen anderen Pfad (genauer: /private/tmp/com.apple.launchd.XXXXstatt /private/tmp/launch-XXXX) und xauthbricht ab.

Dieser Fehler wurde dem XQuartz-Team am 18. November 2014 (vor 3 Monaten) gemeldet ( http://xquartz.macosforge.org/trac/ticket/2068 ):

Das xauth-Programm enthält sowohl in gethost.c als auch in parsedpy.c Code, um nach $DISPLAY-Namen zu suchen, die mit "/tmp/launch" beginnen, und dies als lokalen Socket zu behandeln. Der Speicherort scheint sich jedoch geändert zu haben, $DISPLAY beginnt jetzt mit "/private/tmp/com.apple.launchd", sodass der Code, der nach /tmp/launch sucht, es nicht abfängt. (...)

Laut Fehlerbeschreibung soll er in XQuartz 2.7.8 behoben werden, das 4 Monate zu spät ist (siehe Projekt-Roadmap-Seite unter http://xquartz.macosforge.org/trac/roadmap ).

Der Patch, der das Problem behebt, wurde am 31. Dezember 2014 an das Projekt freedesktop.org übergeben ( http://cgit.freedesktop.org/xorg/app/xauth/commit/parsedpy.c?id=f990dd936b5fd1a40290bb88cde517a0ac38f823 ):

diff --git a/parsedpy.c b/parsedpy.c
index c591b77..7365224 100644
--- a/parsedpy.c
+++ b/parsedpy.c
@@ -42,6 +42,9 @@ in this Software without prior written authorization from The Open Group.
 #include <X11/Xauth.h>         /* for FamilyLocal */
 #include <X11/Xmu/SysUtil.h>

+#include <sys/stat.h>
+#include <sys/syslimits.h>
+
 #if defined(UNIXCONN) || defined(LOCALCONN)
 #define UNIX_CONNECTION "unix"
 #define UNIX_CONNECTION_LENGTH 4
@@ -158,8 +161,32 @@ parse_displayname (const char *displayname,

     if (!host) return False;

-    if(strncmp (host, "/tmp/launch", 11) == 0) {
-        family = FamilyLocal;
+    {
+        /*
+         * If using launchd socket, remove the screen number from the end
+         * of $DISPLAY and check if it is a path to a socket.
+         */
+        char path[PATH_MAX];
+        struct stat sbuf;
(...)

Es ist also nur eine Frage der Zeit, bis dieser Patch den Weg in das nächste Release von XQuartz findet.

Problemumgehung

(getestet auf OS X 10.10.2 Yosemite.)

Hinzufügen:

alias ssh="ln -fs $(echo $DISPLAY | sed 's:\(/private/tmp/com\.apple\.launchd\.[^/]*\)/.*:\1:') $(echo $DISPLAY | sed 's:/private/tmp/com\.apple\.launchd\.\([^/]*\)/.*:/private/tmp/launch-\1:'); ssh"

zu ~/.bashrcund starten Sie entweder ein neues Terminalfenster oder beziehen Sie es ( . ~/.bashrc) in Ihre aktuelle Terminalsitzung.

Dieser Alias ​​verknüpft zuerst den Socket-Pfad mit /private/tmp/launch-XXX(zum Beispiel ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS) und beginnt dann mit ssh:

Geben Sie hier die Bildbeschreibung ein


Für Neugierige hat der Anzeigename des X-Servers traditionell diese Form (ab man XUbuntu): Der Anzeigename des X-Servers hat diese Form:

hostname:displaynumber.screennumber

wo:

   hostname
           The hostname specifies the name of the machine to which the display  is  physically
           connected.   If  the hostname is not given, the most efficient way of communicating
           to a server on the same machine will be used.

   displaynumber
           The phrase "display" is usually used to refer to  a  collection  of  monitors  that
           share a common set of input devices (keyboard, mouse, tablet, etc.).  Most worksta‐
           tions tend to only have one display.  Larger,  multi-user  systems,  however,  fre‐
           quently  have  several  displays so that more than one person can be doing graphics
           work at once.  To avoid confusion, each display on a machine is assigned a  display
           number (beginning at 0) when the X server for that display is started.  The display
           number must always be given in a display name.

   screennumber
           Some displays share their input devices among two or more monitors.  These  may  be
           configured as a single logical screen, which allows windows to move across screens,
           or as individual screens, each with their own set of windows.  If  configured  such
           that each monitor has its own set of windows, each screen is assigned a screen num‐
           ber (beginning at 0) when the X server for that display is started.  If the  screen
           number is not given, screen 0 will be used.