desarrollo-web-br-bd.com

¿Cómo reenviar X sobre SSH para ejecutar aplicaciones gráficas de forma remota?

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?

390
Mr. Shickadance

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.

  1. Su cliente debe estar configurado para reenviar X11.
  2. Su servidor debe estar configurado para permitir el reenvío X11.
  3. Su servidor debe poder configurar la autenticación X11.

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.

  1. 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
    
  2. 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".

  3. 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.

98
Belden

Asegúrate de eso:

  • Has 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]

Consulte: ¿Qué significa "Advertencia: la configuración de reenvío X11 no confiable no se realizó: no se generaron datos de clave xauth" cuando se ssh'ing con -X?


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.


43
kenorb

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/

21
Ace

Dejando que Ubuntu bash en Windows 10 se ejecute ssh -X para obtener un entorno GUI en un servidor remoto

  • Primero

Instale 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
  • Segundo

Ir a la carpeta contiene ssh_config archivo, el mío es /etc/ssh.

  • Tercero

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
  • Adelante

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
  • Quinto

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
  • Último

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

5
DestinyOne

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!

4
stephen cooke

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.

1
yakovpol

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
1
Aliz Rao

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

1

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.

1
Caleb