Depois de `ssh` sem` -X` em uma máquina, é possível alterar `$ DISPLAY` para fazê-lo funcionar como` ssh -X`?

22

Depois de sshsem -Xuma máquina, é possível alterar algumas configurações (por exemplo $DISPLAY) para que funcione como ssh -X? Se não, qual é o motivo? Obrigado.

Tim
fonte
Eu sugiro que o título da pergunta seja mais curto deixando de fora change $DISPLAY to. O título da pergunta atual não pode ser exibido na íntegra nos resultados da pesquisa, e alterar $ DISPLAY é realmente parte da resposta, não parte da pergunta.
Dmitry Grigoryev

Respostas:

33

Você pode criar uma segunda conexão com o encaminhamento X11 ativado e também pode usar a DISPLAYvariável de ambiente da segunda conexão na primeira.

Na 1ª janela:

$ ssh user@host
user@host$ ...

Na 2ª janela:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

Voltar para a 1ª janela:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

Infelizmente, sshnada faz para conter os encaminhamentos do X11 (ou outros) para o processo / sessão iniciado ou para o usuário executado como na máquina remota (por exemplo, usando soquetes Unix sem verificação de credenciais ou usando espaços de nome), e esses encaminhamentos são simples soquetes de escuta TCP, aos quais qualquer pessoa na máquina remota pode se conectar; toda a segurança do encaminhamento do X11 depende da autenticação do X11.

Encaminhamento X11 à mão

A página de sshd_config(5)manual menciona que:

desativar o encaminhamento do X11 não impede que os usuários encaminhem o tráfego do X11, pois os usuários sempre podem instalar seus próprios encaminhadores.

Aqui está como você pode fazer isso manualmente.

Primeiro, certifique-se de desativar qualquer controle de acesso baseado em host ou usuário que ignore o mecanismo de autenticação x11 [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

Em seguida, mostre as informações de autenticação DISPLAY=:0na máquina local:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

Conecte-se à máquina remota sem nenhum encaminhamento X11:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

Abra a linha de comando ~Ce adicione um encaminhamento remoto da porta 6000+43ao soquete unix correspondente à exibição :0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

Defina o $DISPLAYenvvar e adicione as informações de autenticação do local à máquina remota:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

Agora você está pronto para ir:

hzy64$ xterm

[1] devido a uma correção incorreta de erros , o controle de acesso baseado no usuário é ativado por padrão no Debian via /etc/X11/Xsession.d/35x11-common_xhost-local. Pior, é o único disponível por padrão no XWayland, onde também não pode ser desativado . Qualquer programa em que os proxies do protocolo X11 (por exemplo xscope) tenham que fazer sua própria verificação de cookie x11 auth (da maneira que o ssh faz), a menos que queira abrir um buraco no servidor X11.

mosvy
fonte
1
Se você se preocupa com segurança, -Xseria um pouco melhor que -Y, não é?
Stephen Kitt
13
muitos (a maioria?) programas X11 não funcionam -X, apenas com -Y. as pessoas não percebem isso porque em muitos sistemas (por exemplo: debian) ForwardX11Trustedestá definido como yespadrão, e as opções -Xe -Ysão equivalentes ;-)
mosvy