redirecionando manualmente a saída X através do ssh

2

Eu tenho um servidor remoto, no qual eu consigo efetuar login com o ssh. No entanto, não há diretório inicial para o meu usuário.

Quando eu tento ssh -X para esse servidor, ssh tenta colocar um cookie em ~/.Xauthority , o que obviamente falha e, portanto, nenhuma saída X é possível.

Até onde eu vejo, não há como especificar um arquivo diferente para salvar o cookie.

Por isso, tentei configurar as coisas manualmente em uma residência temporária:

mkdir -p /tmp/myhome
cd /tmp/myhome
export HOME=$PWD
xauth add $DISPLAY . $COOKIE
xlogo # test setup

Em teoria, o ssh deve configurar o túnel e definir o $ DISPLAY corretamente e a única coisa que falta é o valor correto para $ COOKIE.

O valor mostrado com xauth list (algo como ffb3c8b945442b70146f7158861f1a54 ) em outro servidor não parece válido neste.

Pergunta:

  • Por que um cookie que funciona em um servidor não funciona em outro?
  • Como obtenho um cookie funcional no meu caso?
  • Existe uma maneira mais fácil de configurar o xforwarding nesse caso? (além de obter um diretório pessoal adequado ou usar uma conexão xhost não criptografada)
por michas 22.11.2015 / 16:21

1 resposta

-1

O OpenSSH fornece uma maneira alternativa de configurar o cookie X no lado do protocolo: a sshrc ficheiro . Esse arquivo pode ser ~/.ssh/rc ou /etc/ssh/sshrc (ou /etc/sshrc ou algum outro local, dependendo da configuração do servidor). O manual fornece um snippet de código para usar nesse arquivo para definir o cookie manualmente. A menos que o /bin/sh do seu servidor seja um antigo pré-POSIX, você pode simplificar este código para

if read proto cookie && [ -n "$DISPLAY" ]; then
  echo "add unix:${DISPLAY#localhost:} $proto $cookie" | xauth -q -
fi

O manual sugere colocar esse código depois de algum código que configura o diretório inicial - no seu caso você configuraria a variável de ambiente HOME , possivelmente crie um diretório temporário para ele primeiro.

Seu código é semelhante, mas mantém localhost: no início da exibição, o que não funcionará se o servidor não estiver ouvindo as conexões TCP. Uma exibição do formulário localhost:10 não é equivalente a :10 , embora eles tenham efeitos similares se ambos funcionarem: o formulário com um nome de host passa por uma conexão TCP, enquanto o formulário sem um nome de host usa um soquete Unix, que pode ser tudo o que está disponível (e que permite otimizações, mesmo que o TCP esteja disponível, mas duvido que essas otimizações façam alguma coisa quando a conexão for retransmitida através do TCP por SSH).

O motivo para preferir echo add … | xauth - em vez de xauth add … é que outro usuário que esteja procurando nos processos criados pode capturar a linha de comando xauth . Como echo é um shell embutido, eles não poderão recuperar o cookie com o formulário echo add … .

    
por 23.11.2015 / 01:08