SSH X11 não está funcionando

15

Eu tenho um computador em casa e no trabalho, o computador doméstico tem um endereço IP estático.

Se eu ssh do meu computador de trabalho para o meu computador de casa, a conexão ssh funciona, mas os aplicativos X11 não são exibidos.

No meu /etc/ssh/sshd_config em casa:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

No trabalho, experimentei os seguintes comandos:

xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP

Meu /etc/ssh/ssh_config no trabalho:

Host *
ForwardX11 yes 
ForwardX11Trusted yes

Meu ~/.ssh/config no trabalho:

Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes

Meu ~/.Xauthority no trabalho:

-rw------- 1 azat azat 269 Jun  7 11:25 .Xauthority

Meu ~/.Xauthority em casa:

-rw------- 1 azat azat 246 Jun  7 19:03 .Xauthority

Mas não funciona

Depois de fazer uma conexão ssh para casa:

$ echo $DISPLAY
localhost:10.0

$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0

Eu uso iptables em casa, mas permiti a porta 22. De acordo com o que li, é tudo o que preciso.

UPD. Com -vvv

...
debug2: callback start
debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1
debug2: client_session2_setup: id 1
debug2: fd 3 setting TCP_NODELAY
debug2: channel 1: request pty-req confirm 1
...

Quando tentar iniciar o kate :

debug1: client_input_channel_open: ctype x11 rchan 2 win 65536 max 16384
debug1: client_request_x11: request from 127.0.0.1 55486
debug2: fd 8 setting O_NONBLOCK
debug3: fd 8 is O_NONBLOCK
debug1: channel 2: new [x11]
debug1: confirm x11
debug2: X11 connection uses different authentication protocol.
X11 connection rejected because of wrong authentication.
debug2: X11 rejected 2 i0/o0
debug2: channel 2: read failed
debug2: channel 2: close_read
debug2: channel 2: input open -> drain
debug2: channel 2: ibuf empty
debug2: channel 2: send eof
debug2: channel 2: input drain -> closed
debug2: channel 2: write failed
debug2: channel 2: close_write
debug2: channel 2: output open -> closed
debug2: X11 closed 2 i3/o3
debug2: channel 2: send close
debug2: channel 2: rcvd close
debug2: channel 2: is dead
debug2: channel 2: garbage collecting
debug1: channel 2: free: x11, nchannels 3
debug3: channel 2: status: The following connections are open:
  #1 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
  #2 x11 (t7 r2 i3/0 o3/0 fd 8/8 cc -1)

# The same as above repeate about 7 times

kate: cannot connect to X server localhost:10.0

UPD2 Por favor, forneça sua distribuição Linux & número da versão.
Você está usando um ambiente GNOME ou KDE padrão para X ou algo mais que você mesmo personalizou?

azat:~$ kded4 -version
Qt: 4.7.4
KDE Development Platform: 4.6.5 (4.6.5)
KDE Daemon: $Id$

Você está invocando ssh diretamente em uma linha de comando a partir de uma janela de terminal?
Qual terminal você está usando? xterm, gnome-terminal ou?
Como você iniciou o terminal em execução no ambiente X? De um menu? Hotkey ou?

From terminal emulator 'yakuake'
Manualy press 'Ctrl + N' and write commands

Você pode executar xeyes na mesma janela de terminal em que o ssh -X falha?

'xeyes' - is not installed
But 'kate' or another kde app is running

Você está invocando o comando ssh como o mesmo usuário que está conectado na sessão X como?
From the same user

UPD3

Eu também baixei ssh sources, e usando debug2() escrevi porque é que a versão é diferente. Veja alguns cookies, e um deles está vazio, outro é MIT-MAGIC-COOKIE-1

    
por azat 09.06.2011 / 16:36

4 respostas

21

O motivo pelo qual o encaminhamento do ssh X não estava funcionando foi porque eu tenho um arquivo de configuração /etc/ssh/sshrc .

O final dos estados da página sshd(8) man:

If ~/.ssh/rc exists, runs it; else if /etc/ssh/sshrc exists, runs it; otherwise runs xauth

Então, adiciono os seguintes comandos ao /etc/ssh/sshrc (também da página man do sshd) no lado do servidor:

if read proto cookie && [ -n "$DISPLAY" ]; then
        if [ 'echo $DISPLAY | cut -c1-10' = 'localhost:' ]; then
                # X11UseLocalhost=yes
                echo add unix:'echo $DISPLAY |
                    cut -c11-' $proto $cookie
        else
                # X11UseLocalhost=no
                echo add $DISPLAY $proto $cookie
        fi | xauth -q -
fi

E funciona!

    
por 11.04.2012 / 12:26
2

Sempre que tiver problemas com o ssh, a primeira coisa que você deve fazer é executar o cliente com a opção -v para fornecer a saída a ser inspecionada por outras pessoas:

ssh -v user@somewhere

Vou adivinhar que o problema está no seu sistema local. Como você está invocando o comando ssh? Você está executando manualmente em um shell? Ou está sendo executado como parte de um script? Em ambos os casos, você desejará certificar-se de que seu sistema local tenha o ambiente DISPLAY configurado corretamente. Ele também precisa ser configurado corretamente no lado remoto, mas esse valor será diferente no lado remoto do que no lado local.

A partir do que você escreveu, parece que está sendo configurado corretamente no host remoto (e, por extensão, o encaminhamento do X11 está sendo configurado corretamente pelo ssh). No sistema remoto você tem:

$ echo $DISPLAY
localhost:10.0

O que é isso mostrando no lado local? Isso deve ser fácil de verificar se você está em um shell fazendo eco ao valor, bem como iniciando um aplicativo X a partir desse shell ... você sempre pode usar o venerable xeyes para esse tipo de teste, é claro! :)

Por outro lado, se você estiver chamando o comando ssh de um script ou conectado a uma tecla de atalho, ele pode não herdar o ambiente esperado, portanto, DISPLAY variável de ambiente no lado local pode não ser definido.

Além disso, já que parece que você está mexendo no arquivo .Xauthority , você pode querer deletá-lo completamente, então saia da sua sessão X e faça o login novamente para que ele seja recriado automaticamente. Raramente há a necessidade de mexer com o seu .Xauthority , então tentar isso é provavelmente apenas uma medida desesperada que não vai ajudar.

O que você deve ver no lado local é:

$ echo $DISPLAY
:0.0

Em um sistema configurado adequadamente, se você abrir um shell, não precisará configurá-lo manualmente; ele deverá ser herdado do ambiente que iniciou o shell. No entanto, eu tenho visto configurações de gerenciador de janelas / teclas de atalho que não manipulam adequadamente a herança de variáveis de ambiente. Se você tem o sistema linux executando gnome-session ou kde-session que você usa para iniciar seus shells ou scripts, então suas variáveis de ambiente da sessão X devem ser configuradas corretamente como descrito no Documentação do Ubuntu sobre herança de variáveis de ambiente :

When a parent process creates a child process, for example when we run the "gedit" command from the terminal and "bash" (the parent process) creates "gedit" (the child process), the child process inherits all the environment variables and values the parent process had.

...

Note: in the Gnome graphical desktop environment, gnome-session is the parent process of all the processes running on the desktop. This fact (along with the Inheritance principle) is the key to our ability to powerfully influence the operation of our desktop with environment variables. The equivalent process in KDE is kde-session.

ATUALIZADO

Obrigado por postar a saída de ssh -vvv . Nesse caso, o detalhamento extra de -vvv versus apenas -v é útil. A saída de depuração me diz que o encaminhamento do X11 está sendo configurado corretamente:

debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1

Mas o :0 na primeira linha me faz acreditar que ainda existe um erro de configuração no lado local na maneira como você está invocando o ssh. Em muitos sistemas, o valor padrão para DISPLAY é :0.0 , não :0 . De alguma forma você está definindo o valor de DISPLAY manualmente antes de chamar o comando ssh?

Mais informações sobre o seu sistema local e como você está invocando o comando ssh seriam úteis neste momento.

  • Por favor, forneça sua distribuição Linux & número da versão.
  • Você está usando um ambiente GNOME ou KDE padrão para X ou algo mais que você mesmo personalizou?
  • Você está chamando o ssh diretamente em uma linha de comando a partir de uma janela de terminal?
  • Qual terminal você está usando? xterm, gnome-terminal ou?
  • Como você iniciou o terminal em execução no ambiente X? De um menu? Hotkey ou?
  • Você pode executar xeyes da mesma janela do terminal em que ssh -X falha?
  • Você está invocando o comando ssh como o mesmo usuário que você está conectado na sessão X como?

Este último item é importante. Se você estiver executando o ssh como outro usuário (por exemplo, se você abriu uma janela de terminal raiz em vez de uma janela de terminal do usuário), você encontrará esse problema mesmo se estiver definindo explicitamente DISPLAY=:0 , pois não tem permissões para se conectar ao servidor X por padrão como outro usuário (mesmo como root!)

    
por 05.03.2012 / 05:09
1

Suas configurações parecem estar ok, mas tente "ssh -X home" como o Agemen sugeriu.

Além disso, se tudo mais falhar, tente o seguinte:

Depois de ssh para sua máquina doméstica do trabalho, no tipo "home":

xauth list

Depois, em "trabalho", digite

xauth

O que lhe dará um "xauth >" pronto. A partir daqui, digite "add", então copie e cole a saída da "lista xauth", uma linha por vez (cada linha precedida por "add"). Por exemplo:

someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0  MIT-MAGIC-COOKIE-1  781cc753194fd55ecdf6c4cf105c40e3
xauth> 

Deixe-nos saber.

    
por 09.06.2011 / 18:11
-1

Não entendi claramente se você deseja exibir seus aplicativos remotos em sua exibição local ( work ) ou se deseja exibi-los no sistema remoto ( home ).

No primeiro caso, acho que ssh -X host deve ser suficiente, sem necessidade de usar xhost.

No segundo caso, o sistema em que você precisa usar o xhost é home , e isso não é suficiente, você precisa exportar a variável de exibição também.

xhost +work
export DISPLAY=:0.0

Eu não tenho certeza do que você quer fazer ... e como eu não sei quais são as diferenças entre o seu sistema e o meu, na primeira mão, e a configuração exata necessária para o seu caso do outro mão (como eu não sou um especialista ^ _ ^). Espero que isso ajude você de alguma forma, já que essas configurações também funcionaram para mim.

    
por 09.06.2011 / 17:45