Als Root verbinde ich mich mit einem Remote-Host, um einen Befehl auszuführen. Nur "Standardbenutzer" hat die entsprechende ID-Datei und die korrekte .ssh / config-Datei. Daher wechsle ich zuerst den Benutzer:
su standarduser -c 'ssh -x remotehost ./remotecommand'
Der Befehl funktioniert einwandfrei, aber trotz der Tatsache, dass ich "-x" verwendet habe (X11-Forwarding deaktivieren) und X11Forwards deaktiviert habe /etc/ssh/ssh_config
, bekomme ich immer noch die Fehlermeldung:
X11 connection rejected because of wrong authentication.
Ich erhalte keine Fehlermeldung, wenn ich als "Standardbenutzer" angemeldet bin.
Das ist ziemlich ärgerlich, da ich den Befehl in eine Cron-Job-Datei integrieren möchte. Ich verstehe, dass sich die Fehlermeldung auf die falsche Authentifizierung der .XAuth-Datei von root bezieht, aber ich versuche nicht einmal, eine Verbindung über X11 herzustellen.
Warum deaktiviert "ssh -x" die X11-Verbindung nicht und gibt eine Fehlermeldung aus?
UPDATE : Die Meldung wird nur angezeigt, wenn ich innerhalb eines Bildschirms angemeldet bin. Wenn ich den oben angegebenen Befehl auf dem lokalen Computer selbst (ohne Bildschirm) verwende, wird keine Fehlermeldung angezeigt. Dies sollte also auch für cron in Ordnung sein .
Ich habe den gleichen Befehl auch mit gestartet -v
und überraschenderweise die Fehlermeldung FIRST erhalten, noch bevor die Statusinformationen von SSH:
root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013
Dies führte mich zum Problem selbst, es ist NICHT das, ssh
was die Fehlermeldung auslöst, es ist su
:
root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi
Warum erhalte ich diesen Fehler nur innerhalb von screen
? Wie kann ich diese Fehlermeldung deaktivieren?
quelle
-v
zu den ssh-Optionen hinzu. Fügen Sie dann die Ausgabe in Ihre Frage ein.Antworten:
Scheint , wie Ihre Wurzel einig X11 fehlt Magic Cookie in denen
.Xauthority
, die Siestandarduser
hat. Hier erfahren Sie, wie Sie dies beheben können.KURZE VERSION (danke an @bmaupin )
Achtung: Backticks überprüfen! Sie können nicht durch Anführungszeichen ersetzt werden! Sie müssen
sudo
installiert sein, um mit dem zweiten Befehl fortzufahren!ORIGINAL LANGE VERSION
Um das Problem zu beheben, ermitteln Sie zunächst, welche Anzeigenummer
standarduser
verwendet wird:In diesem Fall ist es
21.0
. Zweitens wirdstandarduser
die Liste der Cookies angezeigt :Der Cookie für die
21.0
Anzeige ist der zweite in der Liste und endet mit104f
.Das letzte, was zu tun ist, ist das Hinzufügen dieses speziellen Cookies zum Root
.Xauthority
. Melden Sie sich als root an und gehen Sie folgendermaßen vor:Auf diese Weise können Sie den
X11 connection rejected because of wrong authentication
Fehler mindern , wenn Siesu
als anderer Benutzer im Bash-Skript oder ausgeführt werdenscreen
.Vielen Dank an diesen Kerl für die Inspiration.
quelle
Eine einfachere Lösung:
1.-
ssh user@host
2.-
$ sudo su
3.-
# xauth merge /home/user/.Xauthority
Das ist alles
Natürlich
$DISPLAY
muss die Variable gesetzt werden.quelle
$DISPLAY
Variable eingestellt werden soll? Ich glaube, dass dieser kleine Zusatz Ihrer Antwort zusätzliche Stimmen verleihen wird.xauth: file /root/.Xauthority does not exist
Meine Bedürfnisse waren etwas anders, deshalb habe ich eine etwas andere Lösung gefunden. Ich brauchte die Fähigkeit, eine X11-App als ein anderer Benutzer (der nicht root ist) auszuführen. Unter CentOS habe ich also nicht das süße Gksudo-Tool, das die glücklichen Hunde mit Ubuntu haben, das die Xauth-Magie vollbringt.
Ich wollte wirklich keine benutzerdefinierten Skripte erstellen, nur um mich anzumelden, den Benutzer zu wechseln und eine App auszuführen. das erscheint mir ein bisschen überflüssig.
Schritt eins:
Erlauben Sie $ XAUTHORITY, über Sudo-Sitzungen hinweg übertragen zu werden.
Fügen Sie diese Zeile unter den restlichen env_keep-Anweisungen in / etc / sudoers hinzu:
Schritt zwei:
Erlauben Sie Ihrem Zielbenutzer, Ihre .Xauthority zu lesen (ja, ich weiß, schreien Sie SICHERHEIT! Alles, was Sie wollen). Für diejenigen, die nur Befehle als root ausführen möchten, kann dies übersprungen werden.
Der Zielbenutzer hat dieselbe Gruppe wie ich, sodass ich nur die Gruppenleseberechtigungen einschalte:
Schritt drei:
CentOS füllt standardmäßig nicht den Wert von $ XAUTHORITY. Füge deinem Profil eine Zeile hinzu (meine ist ~ / .bash_profile):
Das ist es. Nie mehr zwicken. Kein Schreiben von XML, um PolicyKit zum Laufen zu bringen. Keine laufenden Skripte für jede Anmeldung. Sie müssen nicht zweimal sudo, um das xauth zu kopieren. Von hier aus können Sie einfach:
Funktioniert hervorragend mit MobaXTerm.
quelle
Sie sollten vollständig zum Zielbenutzer wechseln, dh "
-
" mitsu
(su - standarduser ...
) verwenden. Wenn nicht, wird das X-Zeug von root in die Umgebung gezogen.quelle
Da ich häufig auf einer Root-Squashed-Netzwerk-Dateifreigabe root bin, hat keine der oben genannten Lösungen für mich funktioniert. (xubuntu 14.04). Ich habe das folgende Skript zusammengestellt, das auf meinem System funktioniert. Es kann bei Ihnen funktionieren. Andererseits kann es nicht, aber es ist kostenlos zu versuchen ...
Die Annahme ist, dass ich die Option -Y verwendet habe.
quelle
cookie=$(xauth list|grep $h.*$port)
könnte mehr als beabsichtigt übereinstimmen, wenn $ port zufällig Teil des Cookie-Werts ist. Sicherer ist:cookie=$(xauth list) cookie=${c%% *}
odercookie=$(xauth list |grep $h[^ ]*$port)
.In meinem Fall hatte ich, als ich auf diesen Fehler stieß, ein verschlüsseltes Benutzerverzeichnis. Nachdem
ecrypt-mount-private
ich angerufen hatte , wurde der Fehler behoben und ich konnte die X11-Weiterleitung fortsetzen.Um festzustellen , ob Ihr Home - Ordner verschlüsselt ist, können Sie versuchen , diese (nach dieser Antwort ):
ls -A /home
. Wenn Sie einen.ecryptfs
Ordner sehen, ist Ihr Home-Verzeichnis wahrscheinlich verschlüsselt. In diesem Fall können Sie versuchen, den Befehl auszuführen, den ich am Anfang der Antwort angegeben habe.quelle