Como configurar o ssh para permitir a especificação de um hostname / IP na variável DISPLAY?

1

Eu tenho um aplicativo antigo que estou tentando executar no CentOS6 que usa algumas máquinas: abc1 e abc2.

Eu efetuo login no abc1 e executo o aplicativo, que ssh's para abc2, altera a variável DISPLAY para abc1:0.0 e executa um processo que tenta abrir uma nova janela no abc1. No entanto, ele falha com: cannot open display

Se eu fizer apenas um ssh -X abc2 ou ssh -Y abc2 , posso abrir um xterm sem problemas, mas a variável DISPLAY está definida como algo como localhost:10.0

Observe que o abc1 é resolvido corretamente (eu posso fazer ping do abc1 a abc2)

Eu não posso modificar o aplicativo, então não tenha controle sobre a variável DISPLAY que está usando. No entanto, posso modificar a configuração de abc1 e abc2. Estou em uma rede isolada e não me importo com segurança.

Existe algo em ssh config ou algo mais que eu possa alterar para permitir que abc1:0.0 funcione?

    
por Dtor 19.10.2018 / 06:58

2 respostas

1

Se você estiver fazendo login localmente em abc1 , isso pode ser irrelevante para você ... mas se estiver usando o encaminhamento SSH X11 para conectar-se da sua estação de trabalho a abc1 , você também poderá iniciar um servidor X aninhado em abc1 para capturar a conexão de entrada para abc1:0.0 e passá-la para o servidor X local da sua estação de trabalho dentro do túnel SSH X11 seguro.

No RHEL / CentOS 6, os pacotes RPM necessários para isso são xorg-x11-xserver-Xnest ou xorg-x11-xserver-Xephyr (implementação mais recente, pode ter melhor desempenho).

Basicamente:

  • tem o servidor X regular em abc1 em seu estado padrão de não escutar por conexões TCP
  • tem um servidor X local em execução na sua estação de trabalho
  • estabeleça uma conexão SSH de encaminhamento X11 de sua estação de trabalho para abc1
  • inicie Xnest ou Xephyr no plano de fundo em abc1 com as opções adequadas para fazê-las ouvir em abc1:0.0
  • inicie sua inscrição.

Referindo-se ao comentário do @ roaima sobre a questão: mesmo com antigos aplicativos X, codificar permanentemente a configuração DISPLAY dentro do aplicativo sempre teria sido uma tarefa extremamente desagradável.

É altamente provável que a variável DISPLAY seja configurada em algum lugar configurável. Por exemplo, pode ser especificado no script de login da conta do usuário que é usada para executar o aplicativo. Mas se modificar isso conta como modificar o aplicativo, você terá que usar as soluções sugeridas.

    
por 19.10.2018 / 10:46
0

Breve explicação do que acontece:

O encaminhamento X via ssh cria um soquete de protocolo X local na máquina remota (abc2), da mesma forma que um servidor X na máquina remota, e encaminha o protocolo de conexão X via ssh-tunnel para o original máquina (abc1). O soquete local é identificado como localhost:10.0 .

OTOH, uma exibição abc1:0.0 usa o antigo protocolo de rede X, e espera que o servidor X no abc1 esteja escutando nas portas corretas. Isso é desabilitado por padrão nos sistemas modernos, porque é muito inseguro.

Portanto, se a sua situação é que você realmente deseja que o aplicativo em execução no abc2 use o servidor X em execução no abc1, a maneira mais simples é iniciar o servidor X no abc1 sem a opção -nolisten . Para isso, você precisa descobrir como o servidor X é iniciado (geralmente por um gerenciador de exibição, por exemplo, xdm / gdm / kdm / lightdm) e modificar a chamada de inicialização.

A próxima coisa que você precisa fazer é ativar o controle de acesso. Em uma rede isolada, use apenas xhost + e permita todas as conexões; caso contrário, você poderá usar xauth e adicionar o cookie mágico atual do MIT. Detalhes dependem um pouco de como exatamente o servidor X está configurado em suas máquinas.

    
por 19.10.2018 / 08:13