ssh de dentro da tela GNU não funciona corretamente

2

Eu tento iniciar uma sessão de tela e conectar-me a três máquinas diferentes com o mesmo usuário.

Aqui está o que eu tenho na minha .screenrc

screen -t "machine1" 0 ssh user@machine1
screen -t "machine2" 1 ssh user@machine2
screen -t "machine3" 2 ssh user@machine3

Minhas ~/.ssh/config contém

ForwardX11 yes

Eu recebo o seguinte erro nos terminais de machine2 e machine3.

Warning: No xauth data; using fake authentication data for X11 forwarding
/usr/X11/bin/xauth: error in locking authority file /home/user/.Xauthority

Se eu remover apenas uma das máquinas do meu .screenrc ele funciona corretamente.

Como posso evitar esse erro e conectar-me a várias máquinas a partir da tela.

EDITAR : O diretório inicial do usuário está no NFS e o bloqueio não funciona corretamente com o NFS. Para contornar isso, eu tentei muito ter o arquivo XAuthority em um sistema de arquivos local (/ tmp) ou ter um arquivo por ssh. Eu não consegui, de alguma forma meu xauth parece ignorar completamente o XAUTHORITY variável de ambiente. Ainda confuso ...

user1863
fonte
1
Então funciona bem com 2 máquinas? (E eu suponho que você realmente quer usar o X? Você só precisa disso ForwardX11 quando você quiser usar sessões gráficas. Até onde sei, screen é apenas baseado em personagens?)
Arjan
@Arjan: Bem, às vezes funciona de alguma forma com qualquer número de máquinas e às vezes não. A razão parece ser uma condição de corrida em conjunto com problemas de bloqueio do nfs.
user1863
Se estiver usando ssh -f -N (em algum script de shell, em vez de usar screen ) seria uma opção, então pelo menos você pode adicionar alguns sleep comando entre os 3 comandos? Ou talvez mova os 3 screen comandos de .screenrc em algum script de shell, usando sleep também?
Arjan
E só para ter certeza: você está usando os recursos gráficos do X, certo? Então, você não está apenas tentando obter 3 prompts do shell (baseado em caracteres), mas realmente usa a interface gráfica do X11?
Arjan
@Arjan: o sono também é possível no screenrc. Eu adicionei o sleep 30 entre os comandos da tela e ele realmente dormiu 30 segundos, mas não resolveu o problema. Às vezes, o XAuthority é bloqueado e permanece bloqueado por mais de 30 segundos e, às vezes, não está bloqueado.
user1863

Respostas:

1
/usr/X11/bin/xauth: error in locking authority file /home/user/.Xauthority

Você já teve o mesmo erro sem screen, após a primeira sessão SSH ter sido estabelecida? É estranho que o seu "Se eu remover apenas uma das máquinas [..] funciona corretamente" parece dizer que 2 máquinas funcionam, mas uma terceira gera problemas. E se ssh suporta múltiplas conexões X-forwarded, então pode ser apenas uma questão de fazer as coisas mais devagar? Isso pode ser melhor testado sem screen Eu acho. E se você mudar a ordem das máquinas?

Acho que isso .Xauthority arquivo está na máquina remota, mas não sou especialista. (E se /home/user na sua pergunta era de fato um diretório mais específico, então você provavelmente pode facilmente dizer se é local ou remoto.) Então, pergunta estranha: você tem certeza de que todas as 3 máquinas são realmente diferentes e que ninguém mais está usando mesma conta? De man ssh:

ssh também irá configurar automaticamente os dados do Xauthority na máquina do servidor.   Para este propósito, ele irá gerar um cookie de autorização aleatório,   no Xauthority no servidor, e verifique se todas as conexões encaminhadas   levar este cookie e substituí-lo pelo cookie real quando a conexão   está aberto. O cookie de autenticação real nunca é enviado para o servidor   máquina (e nenhum cookie é enviado na planície).

(E você não poderia substituir screen com ssh -f -N, ou você está usando o título da tela para poder parar as coisas?

Arjan
fonte
Acontece também sem tela, se eu abro os sshs rápido o suficiente. As máquinas são diferentes, mas o usuário é o mesmo, e aqui está o problema: O diretório home do usuário é montado via nfs e ainda estamos no kernel 2.6.16. Parece haver um problema de bloqueio com essa configuração. Obrigado por me apontar na direção certa.
user1863