Tengo una máquina que ejecuta Ubuntu que utilizo SSH desde mi máquina Fedora 14. Quiero reenviar X desde la máquina Ubuntu a Fedora para poder ejecutar programas gráficos de forma remota. Ambas máquinas están en una LAN.
Sé que la opción -X
Habilita el reenvío X11 en SSH, pero siento que me faltan algunos de los pasos.
¿Cuáles son los pasos necesarios para reenviar X desde una máquina Ubuntu a Fedora a través de SSH?
El reenvío X11 debe habilitarse tanto en el lado del cliente como en el lado del servidor.
En el lado del cliente , la opción -X
(X mayúscula) para ssh
habilita el reenvío X11, y usted puede hacer este es el valor predeterminado (para todas las conexiones o para una conexión específica) con ForwardX11 yes
en ~/.ssh/config
.
En el lado del servidor , X11Forwarding yes
Debe especificarse en /etc/ssh/sshd_config
. Tenga en cuenta que el valor predeterminado no es reenvío (algunas distribuciones lo activan en su valor predeterminado /etc/ssh/sshd_config
), Y que el usuario no puede anular esta configuración.
El programa xauth
debe instalarse en el lado del servidor. Si hay algún programa X11 allí, es muy probable que xauth
esté allí. En el caso poco probable de que xauth
se haya instalado en una ubicación no estándar, se puede llamar a través de ~/.ssh/rc
(en el servidor!).
Tenga en cuenta que no necesita establecer ninguna variable de entorno en el servidor. DISPLAY
y XAUTHORITY
se establecerán automáticamente en sus valores adecuados. Si ejecuta ssh y DISPLAY
no está configurado, significa que ssh no reenvía la conexión X11.
Para confirmar que ssh reenvía X11, busque una línea que contenga Requesting X11 forwarding
En la salida ssh -v -X
. Tenga en cuenta que el servidor no responderá de ninguna manera, una precaución de seguridad de ocultar detalles de posibles atacantes.
Para que el reenvío X11 funcione sobre ssh, necesitará 3 cosas en su lugar.
Si tiene ambos # 1 y # 2 en su lugar pero le falta # 3, entonces terminará con una variable de entorno DISPLAY vacía.
Sopa de nueces, así es cómo hacer que el reenvío X11 funcione.
En su servidor, asegúrese de que/etc/ssh/sshd_config contenga:
X11Forwarding yes
X11DisplayOffset 10
Es posible que necesite SIGHUP sshd para que recoja estos cambios.
cat /var/run/sshd.pid | xargs kill -1
En su servidor, asegúrese de tener instalado xauth.
[email protected]:~$ which xauth
/usr/bin/xauth
Si no tiene instalado xauth, se encontrará con el problema de "variable de entorno DISPLAY vacía".
En su cliente, conéctese a su servidor. Asegúrese de decirle a ssh que permita el reenvío de X11. yo prefiero
[email protected]:~$ ssh -X [email protected]
pero te puede gustar
[email protected]:~$ ssh -o ForwardX11=yes [email protected]
o puede configurar esto en su ~/.ssh/config.
Me encontré con esta variable de entorno DISPLAY vacía el día de hoy cuando ingresé a un nuevo servidor que no administro. Rastrear la parte faltante de xauth fue un poco divertido. Esto es lo que hice y lo que tú puedes hacer también.
En mi estación de trabajo local, donde soy administrador, verifiqué que/etc/ssh/sshd_config estaba configurado para reenviar X11. Cuando ssh -X vuelve a localhost, obtengo mi DISPLAY configurado correctamente.
Forzar que DISPLAY se desarmara no fue demasiado difícil. Solo necesitaba ver qué estaban haciendo sshd y ssh para configurarlo correctamente. Aquí está la salida completa de todo lo que hice en el camino.
[email protected]:~$ mkdir ~/dummy-sshd
[email protected]:~$ cp -r /etc/ssh/* ~/dummy-sshd/
cp: cannot open `/etc/ssh/ssh_Host_dsa_key' for reading: Permission denied
cp: cannot open `/etc/ssh/ssh_Host_rsa_key' for reading: Permission denied
En lugar de usar Sudo para forzar la copia de mis archivos ssh_Host_ {dsa, rsa} _key en su lugar, utilicé ssh-keygen para crear archivos ficticios para mí.
[email protected]:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_Host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.
Your public key has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.pub.
Enjuague y repita con -t dsa:
[email protected]:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_Host_dsa_key
# I bet you can visually copy-paste the above output down here
Edite ~/dummy-sshd/sshd_config para apuntar a los nuevos archivos de clave ssh_Host correctos.
# before
[email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_dsa_key
# after
[email protected]:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config
HostKey /home/blyman/dummy-sshd/ssh_Host_rsa_key
HostKey /home/blyman/dummy-sshd/ssh_Host_dsa_key
Inicie sshd en un nuevo puerto en modo sin desconexión:
[email protected]:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
sshd re-exec requires execution with an absolute path
Vaya, mejor corrige ese camino:
[email protected]:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
debug1: read PEM private key done: type RSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: private Host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
debug1: private Host key: #1 type 2 DSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-p'
debug1: rexec_argv[2]='50505'
debug1: rexec_argv[3]='-f'
debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
debug1: rexec_argv[5]='-d'
Set /proc/self/oom_adj from 0 to -17
debug1: Bind to port 50505 on 0.0.0.0.
Server listening on 0.0.0.0 port 50505.
debug1: Bind to port 50505 on ::.
Server listening on :: port 50505.
Pop una nueva terminal y ssh en localhost en el puerto 50505:
[email protected]:~$ ssh -p 50505 localhost
The authenticity of Host '[localhost]:50505 ([::1]:50505)' can't be established.
RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
1 package can be updated.
0 updates are security updates.
Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
Environment:
LANG=en_US.UTF-8
USER=blyman
LOGNAME=blyman
HOME=/home/blyman
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAIL=/var/mail/blyman
Shell=/bin/bash
SSH_CLIENT=::1 43599 50505
SSH_CONNECTION=::1 43599 ::1 50505
SSH_TTY=/dev/pts/16
TERM=xterm
DISPLAY=localhost:10.0
Running /usr/bin/xauth remove unix:10.0
/usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393
Mira las últimas tres líneas allí. Afortunadamente tenía el conjunto DISPLAY, y tenía esas dos líneas bonitas de/usr/bin/xauth.
A partir de ahí, fue un juego de niños mover mi/usr/bin/xauth a /usr/bin/xauth.old, desconectarme de ssh y detener el sshd, luego lanzar sshd y ssh nuevamente en localhost.
Cuando/usr/bin/xauth desapareció, no vi DISPLAY reflejado en mi entorno.
No hay nada brillante pasando aquí. Principalmente tuve la suerte de elegir un enfoque sensato para intentar reproducir esto en mi máquina local.
Asegúrate de eso:
xauth
instalado en el servidor (ver: xauth info
/xauth list
).En el servidor tu /etc/ssh/sshd_config
el archivo tiene estas líneas:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
En el lado del cliente su ~/.ssh/config
el archivo tiene estas líneas:
Host *
ForwardAgent yes
ForwardX11 yes
En el lado del cliente, tiene instalado el servidor X (por ejemplo, macOS: XQuartz; Windows: Xming).
Luego, para reenviar X11 usando SSH, debe agregar -X
a su comando ssh
, p.
ssh -v -X [email protected]
luego verifique que su DISPLAY
esté no vacío por:
echo $DISPLAY
Si es así, entonces tiene un parámetro detallado para ssh (-v
), verifique cualquier advertencia, p.
debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
En caso de que tenga ¡X11 no confiable como se muestra arriba, entonces intente -Y
flag en su lugar (si confía en el Host):
ssh -v -Y [email protected]
En caso de que haya advertencia: ¡No hay datos de xauth, puede intentar generar un nuevo .Xauthority
archivo, p.
xauth generate :0 . trusted
xauth list
Consulte: Crear/reconstruir un nuevo archivo .Xauthority
Si tiene advertencias diferentes a las anteriores, siga las pistas adicionales.
La solución es agregar esta línea a su /etc/ssh/sshd_config
:
X11UseLocalhost no
https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/
ssh -X
para obtener un entorno GUI en un servidor remotoInstale todo lo siguiente. En Windows, instale Xming
. En Ubuntu en la terminal, use Sudo apt install
instalar ssh xauth xorg
.
Sudo apt install ssh xauth xorg
Ir a la carpeta contiene ssh_config
archivo, el mío es /etc/ssh
.
Editar ssh_config
como administrador (USE Sudo
). Dentro ssh_config
, elimine el hash #
en las líneas ForwardAgent
, ForwardX11
, ForwardX11Trusted
, y establezca los argumentos correspondientes en yes
.
# /etc/ssh/ssh_config
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
En ssh_config
archivo, elimine el hash frontal #
antes de Port 22
y Protocol 2
, y también agregue una nueva línea al final del archivo para indicar la ubicación del archivo xauth, XauthLocation /usr/bin/xauth
, recuerda escribir tu propia ruta del archivo xauth.
# /etc/ssh/ssh_config
# IdentifyFile ...
Port 22
Protocol 2
# Cipher 3des
# ...
# ...
...
...
GSSAPIDelegateCredentials no
XauthLocation /usr/bin/xauth
Ahora, ya que hemos terminado de editar ssh_config
archivo, guárdelo cuando salgamos del editor. Ahora ve a la carpeta ~
o $HOME
, adjuntar export DISPLAY=localhost:0
para usted .bashrc
archivar y guardarlo.
# ~/.bashrc
...
...
export DISPLAY=localhost:0
Casi terminamos. Reinicie su bash Shell, abra su programa Xming
y use ssh -X [email protected]
. Entonces disfrute del entorno GUI.
ssh -X [email protected]
El problema también está en el subsistema Ubuntu en Windows, y el enlace está en
https://Gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776
Añadir X11UseLocalhost no
a /etc/ssh/sshd_config
y reinicie el servidor SSH.
Si no aparece DISPLAY, verifique si xauth está instalado correctamente y luego vuelva a intentarlo.
RHE/CEntos no tiene este problema, ¡esto es algo de Ubuntu!
Para mí, el problema estaba en la opción de montaje nodev para el sistema de archivos/tmp. X11 necesita un archivo especial para crearse allí.
Por lo tanto, compruebe cuáles son las opciones de montaje para el sistema de archivos/tmp si usa una partición o disco separado para eso.
Para agregar a las excelentes respuestas anteriores (configurar ~/.ssh/config
y verificando si la variable de entorno DISPLAY
está configurada en el cliente, configurando /etc/ssh/sshd_config
e instalando xauth
en el servidor), también asegúrese de que xterm
esté instalado en el cliente, p.
Sudo apt-get install xterm
xauth
puede bloquearse.
-b This option indicates that xauth should attempt to break any authority file locks before proceeding. Use this
option only to clean up stale locks.
Utilizando
xauth -b
En la máquina en la que intentaba ssh
se rompió el bloqueo en xauth
. Cerrar sesión en la sesión ssh
después de emitir xauth -b
luego volver a iniciar sesión finalmente me permitió con éxito echo $DISPLAY
. Definitivamente intente esto antes de volver a crear .Xauthority
X11Forwarding
debe estar configurado en el servidor SSH (en su caso, el cuadro de Ubuntu) en su sshd_config
, y debe permitir que X11 se reenvíe para el cliente SSH (su caja de Fedora) pasando el -X
opción o editando el ssh_config
archivo para agregar el ForwardX11
defecto.