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.
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
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:
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.
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 ;-)
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.Respostas:
Você pode criar uma segunda conexão com o encaminhamento X11 ativado e também pode usar a
DISPLAY
variável de ambiente da segunda conexão na primeira.Na 1ª janela:
Na 2ª janela:
Voltar para a 1ª janela:
Infelizmente,
ssh
nada 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: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]:
Em seguida, mostre as informações de autenticação
DISPLAY=:0
na máquina local:Conecte-se à máquina remota sem nenhum encaminhamento X11:
Abra a linha de comando
~C
e adicione um encaminhamento remoto da porta6000+43
ao soquete unix correspondente à exibição:0
:Defina o
$DISPLAY
envvar e adicione as informações de autenticação do local à máquina remota:Agora você está pronto para ir:
[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 exemploxscope
) 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.fonte
-X
seria um pouco melhor que-Y
, não é?-X
, apenas com-Y
. as pessoas não percebem isso porque em muitos sistemas (por exemplo: debian)ForwardX11Trusted
está definido comoyes
padrão, e as opções-X
e-Y
são equivalentes ;-)