
Primero que nada lo que quiero hacer:
Quiero iniciar sesión en un servidor mediante ssh
. Luego cambie el usuario sudo su user
e inicie alguna aplicación en mi pantalla.
Algunos colegas lo hacen por
su user
export DISPLAY=<IP>:0
y funciona.
Me conecto a un servidor mediante ssh -X user@server
. Luego inicio una aplicación X11. Esto funciona bien (aunque hay advertencias).
Advertencias:
libEGL warning: DRI3: failed to query the version
libEGL warning: DRI2: failed to authenticate
qt.qpa.xcb: QXcbConnection: XCB error: 1 (BadRequest), sequence: 414, resource id: 1897, major code: 155 (Unknown), minor code: 1
Si ejecuto sudo su
(o sudo su user
) e inicio el programa o lo ejecuto, sudo myprogram
hay un error.
Error:
X11 connection rejected because of wrong authentication.
qt.qpa.xcb: could not connect to display localhost:11.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Aborted
Encontré algunos artículos sobre este problema.
El reenvío X11 falla al cambiar de usuario
conexión ssh. Conexión X11 rechazada debido a una autenticación incorrecta
Así que extienda el /etc/pam.d/su
archivo y el /etc/pam/sudo
archivo por
session optional pam_xauth.so
Y luego cambié /etc/ssh/sshd_config
agregando:
X11Forwarding yes
y reiniciando el sshd por systemctl restart ssh.service
. ssh -T
dicex11forwarding yes
Pero nada cambió.
¿Alguien sabe qué hacer? Es importante verificar algunos cambios en las configuraciones del programa de los usuarios después de realizar cambios.
Respuesta1
Dado que muchas personas vendrán aquí con el mismo mensaje de error, sin darse cuenta de que no está relacionado con el uso de su
, me gustaría señalar que ahora ocurren síntomas similares por una razón muy diferente:
Todo lo que se instale con Snap no funcionará. Entonces xeyes
y xclock
podría funcionar, pero una nueva instalación de chromium-browser
Ubuntu firefox
no funcionará.
La solución es simplemente hacer: export XAUTHORITY=$HOME/.Xauthority
antes de ejecutar la aplicación X11 remota.
Respuesta2
Inseguroopción:
En el host desde el que inicia sesión, ejecute
xhost +
o, sólo un poco más seguro
xhost <IP you want to log in to>
Esto permitirá conexiones desde el host remoto.
¿Por qué es esto inseguro? Cualquier programa y usuario de ese host (o cualquier programa/usuario de cualquier host, con xhost +
) podrá acceder a su pantalla y leer todas las pulsaciones de teclas en la máquina xhost
en la que ejecuta.
Más seguroopción:
Agregue la clave de autorización para su servidor X11 a la máquina remota:
En la máquina local, enumere la "cookie mágica" necesaria:
# xauth list
hostname/unix:0 MIT-MAGIC-COOKIE-1 0123456789abcdef0123456789abcdef
En la máquina remota, agregue el secreto a su ~/.Xauthority
archivo, lo más fácil nuevamente con xauth
:
# setenv DISPLAY <ORIGIN_IP>:0
# xauth add <ORIGIN_IP>:0 MIT-MAGIC-COOKIE-1 0123456789abcdef0123456789abcdef
Tenga en cuenta que los datos del protocolo X11 entre estas máquinas aún no están cifrados y, por lo tanto, son propensos a ataques.
Respuesta3
Suponiendo que el usuario1 es el usuario original (cuya contraseña conoce) y el usuario2 es el usuario objetivo (contraseña desconocida), puedo hacer que esto funcione:
% ssh -Y user1@target-box
Password: xxxxxxxxxxxxx
user1@target-box% sudo -u user2 bash
Password: xxxxxxxxxxxxx
user2@target-box% cp ~user1/.Xauthority ~user2
user2@target-box% xterm &
Tenga en cuenta que esto también supone la configuración sshd correcta que usted explicó en su publicación.