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 -v
y 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 ssh
que 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?
fuente
-v
a las opciones ssh, luego pegue el resultado en su pregunta.Respuestas:
Parece que su raíz carece de alguna galleta mágica X11 en el
.Xauthority
questandarduser
tiene. Aquí es cómo solucionar esto.VERSIÓN CORTA (gracias a @bmaupin )
Atención: ¡ revisa los backticks! ¡No se pueden reemplazar con comillas! ¡Necesita
sudo
instalar para continuar con el segundo comando!VERSIÓN ORIGINAL LARGA
Para arreglar las cosas, primero detecte qué número de pantalla
standarduser
usa:En este caso lo es
21.0
. En segundo lugar, muestrestandarduser
la lista de cookies:La cookie para la
21.0
pantalla es la segunda en la lista y termina con104f
.Lo último que debe hacer es agregar esta cookie particular a la raíz
.Xauthority
. Inicie sesión como root y haga lo siguiente:Así es como puede mitigar el
X11 connection rejected because of wrong authentication
error cuando se ejecutasu
como un usuario diferente en el script Bash oscreen
.Gracias a este chico por la inspiración.
fuente
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.fuente
$DISPLAY
variable? Creo que esta pequeña adición emitirá voces adicionales a su respuesta.xauth: file /root/.Xauthority does not exist
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:
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:
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):
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:
Funciona muy bien con MobaXTerm.
fuente
Debería cambiar completamente al usuario de destino, es decir, usar "
-
" consu
(su - standarduser ...
). Si no, las cosas X de la raíz se arrastrarán en el entorno.fuente
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.
fuente
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%% *}
ocookie=$(xauth list |grep $h[^ ]*$port)
.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.ecryptfs
carpeta, entonces su directorio de inicio probablemente esté encriptado, en cuyo caso puede intentar hacer el comando que puse al comienzo de la respuesta.fuente