"Su" con error "Conexión X11 rechazada debido a autenticación incorrecta"


53

Como root, me estoy conectando a un host remoto para ejecutar un comando. Solo "usuario estándar" tiene el archivo id apropiado y el .ssh / config correcto, así que primero voy a cambiar el usuario:

su standarduser -c 'ssh -x remotehost ./remotecommand'

El comando funciona bien, pero a pesar del hecho de que usé "-x" (deshabilitar el reenvío X11) y tener deshabilitado X11Forwards /etc/ssh/ssh_config, sigo recibiendo el mensaje de error:

X11 connection rejected because of wrong authentication.

No recibo el mensaje de error cuando estoy conectado como "usuario estándar".

Esto es bastante molesto ya que me gustaría integrar el comando en un archivo de trabajo cron. Entiendo que el mensaje de error se refiere a la autenticación incorrecta del archivo .XAuth de la raíz, pero ni siquiera estoy tratando de conectarme a través de X11.

¿Por qué "ssh -x" no deshabilita la conexión X11 y arroja el mensaje de error?

ACTUALIZACIÓN : El mensaje solo se muestra cuando estoy conectado dentro de una pantalla, cuando uso el comando indicado anteriormente en la máquina local (sin pantalla), no recibo un mensaje de error, por lo que esto también debería estar bien con cron .

También comencé el mismo comando con -vy sorprendentemente recibí el mensaje de error PRIMERO, incluso antes de la información de estado de 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

Esto me llevó al problema en sí, NO es el sshque está arrojando el mensaje de error, es su:

root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi

¿Por qué solo recibo este error screen? ¿Cómo puedo deshabilitar este mensaje de error?


Ejecute el comando nuevamente y agréguelo -va las opciones ssh, luego pegue el resultado en su pregunta.
Jenny D

Respuestas:


80

Parece que su raíz carece de alguna galleta mágica X11 en el .Xauthorityque standardusertiene. Aquí es cómo solucionar esto.

VERSIÓN CORTA (gracias a @bmaupin )

standarduser@localhost:~$ xauth list | grep unix`echo $DISPLAY | cut -c10-12` > /tmp/xauth
standarduser@localhost:~$ sudo su
root@localhost:~$ xauth add `cat /tmp/xauth`

Atención: ¡ revisa los backticks! ¡No se pueden reemplazar con comillas! ¡Necesita sudoinstalar para continuar con el segundo comando!

VERSIÓN ORIGINAL LARGA

Para arreglar las cosas, primero detecte qué número de pantalla standarduserusa:

standarduser@localhost:~$ echo $DISPLAY
localhost:21.0

En este caso lo es 21.0. En segundo lugar, muestre standarduserla lista de cookies:

standarduser@localhost:~$ xauth list
localhost/unix:1  MIT-MAGIC-COOKIE-1  51a3801fd7776704575752f09015c61d
localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f
localhost/unix:22  MIT-MAGIC-COOKIE-1  22ba6595c270f20f6315c53e27958dfe
localhost/unix:20  MIT-MAGIC-COOKIE-1  267f68b51726a8a381cfc10c91783a13

La cookie para la 21.0pantalla es la segunda en la lista y termina con 104f.

Lo último que debe hacer es agregar esta cookie particular a la raíz .Xauthority. Inicie sesión como root y haga lo siguiente:

root@localhost:~$ xauth add localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f

Así es como puede mitigar el X11 connection rejected because of wrong authenticationerror cuando se ejecuta sucomo un usuario diferente en el script Bash o screen.

Gracias a este chico por la inspiración.


Interesante. Lo intenté, pero eso tampoco funcionó para mí. En mi caso particular, puedo iniciar casi cualquier cosa (otro xterm, VirtualBox), pero no puedo iniciar gedit (obtengo el mismo error). Sin embargo, si cambio a root, entonces puedo iniciar gedit. Seguí las instrucciones al pie de la letra pero nada. Algo más debe estar mal.
luis.espinal

@ luis.espinal espero que alguien sugiera una solución a su problema particular.
TranslucentCloud

1
La versión larga funcionó a las mil maravillas, pero la versión corta erró en centos con "xauth: (argv): 1: línea de comando" agregar "mala"
Sam

1
la versión corta me funcionó en centos 7
tdc

1
en Ubuntu 18.04.1 la versión corta funciona bien.
Simakis Panagiotis

38

Una solución más fácil:

1.- ssh user@host

2.- $ sudo su

3.- # xauth merge /home/user/.Xauthority

Eso es todo

Por supuesto $DISPLAY, se debe establecer la variable.


1
Esto suena prometedor pero un poco incompleto. ¿Te importaría agregar información sobre cómo establecer exactamente la $DISPLAYvariable? Creo que esta pequeña adición emitirá voces adicionales a su respuesta.
TranslucentCloud

Esto funcionó para mí, mientras que la respuesta de @ TranslucentCloud no. Originalmente encontré el problema al intentar ejecutar el administrador del SDK de Android como root desde la línea de comandos FYI.
scottyseus

2
Esto no funcionó para mí desde entoncesxauth: file /root/.Xauthority does not exist
tdc

2
tdc, eso es solo una advertencia, no un error, xauth creará el archivo; si ejecuta el comando por segunda vez, no lo verá.
Vladimir Panteleev

1
¡Quién necesita aprender algo cuando solo puedes copiar y pegar! ¡Gracias! Mucho más fácil.
Sirenas

7

Mis necesidades eran ligeramente diferentes, así que se me ocurrió una solución ligeramente diferente. Necesitaba la capacidad de ejecutar una aplicación X11 como otro usuario (que no es root). Ejecuto CentOS, así que no tengo la dulce herramienta gksudo que tienen los perros de la suerte con ubuntu que hace la magia Xauth.

Realmente no quería romper algunos scripts personalizados solo para iniciar sesión, cambiar de usuario y ejecutar una aplicación; eso me parece un poco superfluo.

Paso uno:

Permita que $ XAUTHORITY se transfiera a través de sesiones de sudo.

Agregue esta línea debajo del resto de las declaraciones env_keep en / etc / sudoers:

Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"

Segundo paso:

Permita que su usuario objetivo pueda leer su .Xauthority (sí, lo sé, ¡grite SEGURIDAD! Todo lo que quiera). Para aquellos que solo desean la capacidad de ejecutar comandos como root, esto se puede omitir.

El usuario objetivo comparte el mismo grupo que yo, así que solo activo los permisos de lectura grupal:

$ chmod g+r user ~/.Xauthority

Paso tres:

CentOS no rellena el valor de $ XAUTHORITY de forma predeterminada. Agregue una línea a su perfil (el mío es ~ / .bash_profile):

export XAUTHORITY=$HOME/.Xauthority

Eso es. No más ajustes. No escribir .XML para que PolicyKit funcione. No hay secuencias de comandos en ejecución para cada inicio de sesión. No tener que sudo dos veces para copiar el xauth. De aquí en adelante, puedes simplemente:

$ sudo -u user xcalc

Funciona muy bien con MobaXTerm.


Esto era justo lo que necesitaba para resolver el problema que estaba teniendo al obtener la consola VM en CentOS 7. En realidad, solo necesitaba hacer el Paso Tres para mi propósito (y, por supuesto, asegurarme de que X11Forwarding estuviera configurado en sí en / etc / ssh / sshd_config). Gracias.
darklion

¡Increíble! ¡Esta es la respuesta! Gracias @W Smith
hasta el

1

Debería cambiar completamente al usuario de destino, es decir, usar " -" con su( su - standarduser ...). Si no, las cosas X de la raíz se arrastrarán en el entorno.


0

Debido a que frecuentemente utilizo un recurso compartido de archivos de red aplastado, ninguna de las soluciones anteriores funcionó para mí. (Xubuntu 14.04). Arme el siguiente script, que funciona en mi sistema. Puede funcionar en el tuyo. Por otra parte, puede que no, pero es gratis intentarlo ...

Se supone que he usado la opción -Y.

#!/bin/bash  
if [[ $DISPLAY =~ localhost(:[[:digit:]]+) ]] ;then
    port=${BASH_REMATCH[1]}
else
    echo "Unexpected DISPLAY $DISPLAY"
    exit 1
fi
h=$(hostname)
cookie=$(xauth list|grep $h.*$port)
sudo -i xauth -i add $cookie
sudo -i $*

La línea cookie=$(xauth list|grep $h.*$port)podría coincidir más de lo previsto si $ port forma parte del valor de la cookie. Más seguro es: cookie=$(xauth list) cookie=${c%% *}o cookie=$(xauth list |grep $h[^ ]*$port).
PePa

0

En mi caso, cuando encontré ese error, tenía un directorio de usuarios encriptado. Después de llamar ecrypt-mount-private, eliminó el error y me permitió continuar con el reenvío de X11.

Para determinar si está cifrada la carpeta de inicio, puede probar esto (como por esta respuesta ): ls -A /home. Si ve una .ecryptfscarpeta, entonces su directorio de inicio probablemente esté encriptado, en cuyo caso puede intentar hacer el comando que puse al comienzo de la respuesta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.