![atualizar](https://rvso.com/image/38701/atualizar.png)
Da minha máquina local I ssh
para um servidor remoto junto com a autenticação referente à exibição do X. Eu sei que neste processo MIT-MAGIC-COOKIES
são usados e o valor tanto no servidor quanto no cliente precisa ser idêntico para que o processo de autenticação seja válido.
No entanto, quando eu faço login em um servidor remoto e confirmo que o material de exibição do X está funcionando bem (por exemplo, executando xclock
para ver se o xclock
aplicativo aparece na minha máquina local), quando verifico o valor dos cookies, o valor na máquina local e isso no servidor remoto parece ser diferente. Aqui estão as linhas de comando:
valor do cookie no servidor remoto
chulhyun@chulhyun-Inspiron-3420:~$ ssh -X Black@$labcom
Last login: Wed Jun 25 10:02:25 2014 from
Black@Black-PC ~
$ xclock ### xclock appears in local machine.
Black@Black-PC ~
$ xauth list
Black-PC/unix:10 MIT-MAGIC-COOKIE-1 708f623489b1ea129a77e98287d130ca
valor do cookie na máquina local
chulhyun@chulhyun-Inspiron-3420:~$ xauth list
chulhyun-Inspiron-3420/unix:0 MIT-MAGIC-COOKIE-1 5ddd2ce92004eab53ceee8a64b7b88c0
Como você pode ver, o valor do cookie em duas máquinas é diferente. Então o display X não deveria funcionar?
O que estou perdendo aqui?
PS Ouvi dizer que $XAUTHORITY
contém o caminho para o xauthority
arquivo e verifiquei esse caminho na máquina local:
chulhyun@chulhyun-Inspiron-3420:~$ echo $XAUTHORITY
/var/run/gdm/auth-for-chulhyun-iZfH2u/database
Quando dou uma olhada no arquivo "banco de dados", o conteúdo fica ilegível porque é composto de caracteres estranhos.
^A^@^@^Vchulhyun-Inspiron-3420^@^A0^@^RMIT-MAGIC-COOKIE-1^@^P]?,? ^D??<??? K{??
isso poderia estar relacionado à pergunta?
atualizar
resultado de xhost
e $XAUTHORITY
no servidor remoto
Black@Black-PC ~
$ xhost
access control enabled, only authorized clients can connect
SI:localuser:chulhyun
Black@Black-PC ~
$ echo $XAUTHORITY
*Acontece que $XAUTHORITY
não está definido... isso é normal?
resultado de xhost
na máquina local
chulhyun@chulhyun-Inspiron-3420:~$ xhost
access control enabled, only authorized clients can connect
SI:localuser:chulhyun
Responder1
Acredito que você esteja confuso sobre como o SSH executa o proxy da conexão X11 por meio do túnel estabelecido no lado do servidor remoto e como os cookies mágicos normalmente funcionam. Na página de manual do SSH:
excertoThe DISPLAY value set by ssh will point to the server machine, but with a
display number greater than zero. This is normal, and happens
because ssh creates a “proxy” X server on the server machine for forwarding
the connections over the encrypted channel.
ssh will also automatically set up Xauthority data on the server machine.
For this purpose, it will generate a random authorization cookie,
store it in Xauthority on the server, and verify that any forwarded
connections carry this cookie and replace it by the real cookie when the
connection is opened. The real authentication cookie is never sent to the
server machine (and no cookies are sent in the plain).
Portanto, parece que os cookies mágicos mostrados a você no servidor remoto não são de fato os verdadeiros cookies mágicos no servidor local (sua extremidade). Lembre-se de que o DISPLAY está sendo definido assim quando você usa SSH em um servidor remoto:
$ echo $DISPLAY
localhost:11.0
E os cookies mágicos estão conectados por isto $DISPLAY
:
$ xauth list
remotey.dom.com/unix:11 MIT-MAGIC-COOKIE-1 00f505f4c5731714d30f24a956d4cb8f
A dica é essa /unix:11
. Esse é o cookie mágico para o lado local da conexão SSH, não para o X11 do seu servidor local, que normalmente seria :0
.
.Xautoridade
É verdade que este arquivo contém cookies mágicos, mas é um arquivo binário e você normalmente interage com ele por meio do xauth
comando. Consulte xauth
a página de manual do para obter mais informações sobre isso.
Fazendo isso manualmente
Muitas vezes você verá esta mensagem aparecer se fizer o seguinte:
$ ssh -X user1@remotey
$ su - user2
$ xclock
X11 connection rejected because of wrong authentication.
X connection to localhost:10.0 broken (explicit kill or server shutdown).
Isso ocorre porque o segundo usuário .Xauthority
não sabe nada sobre o cookie mágico que foi passado pelo SSH quando você efetuou login inicialmente. Você pode gerar o xauth add
necessário enquanto for usuário1 e usá-lo como usuário2 assim:
$ ssh -X user1@remotey
$ echo $DISPLAY
localhost:10.0
Observe acima que você está no display # :10.0
. Agora gere o número xauth add
necessário para esse display:
$ echo xauth add $(xauth list ${DISPLAY#localhost})
xauth add remotey.dom.com/unix:10 MIT-MAGIC-COOKIE-1 111ef940f6d75b4a9eb64ea3579ef67e
Agora torne-se usuário2 e adicione-o:
$ su - user2
$ xauth add remotey.dom.com/unix:10 MIT-MAGIC-COOKIE-1 111ef940f6d75b4a9eb64ea3579ef67e
$ xclock
E obtemos o relógio exibido conforme o esperado.
OBSERVAÇÃO:Você também pode fazer coisas em uma única linha de comando depois de entender o que está acontecendo acima.
usando su$ xauth extract - ${DISPLAY#localhost} | \
su - user2 -c "xauth merge -; xclock"
usar sudo
$ xauth extract - ${DISPLAY#localhost} | \
sudo su - user2 -c "xauth merge -; xclock"