a tela em execução em um shell não pode encontrar sessões, mas a tela em execução durante o login ssh pode

2

Estou usando o script RemoteLoginAutoScreen para iniciar uma sessão de tela quando eu ssh em um host.

Diferenças do script vinculado: estou usando zsh e o RemoteLoginAutoScreen usa bash

O problema que estou correndo é que minha conexão ssh foi desconectada (o que acontece com frequência e, portanto, a configuração da tela automática) e estou tendo problemas para reconectar a minha sessão de tela existente.

No host, posso ver que meu processo de tela ainda está em execução e os soquetes de tela ainda existem:

$ ps auxww | grep -i screen | grep alexq
alexq     1818  0.0  0.0 103452   868 pts/19   S+   18:08   0:00 grep --color=auto -i screen
alexq    20270  0.0  0.0 120040  2004 ?        Ss   Jul21   0:19 SCREEN -R

$ ls -al /var/run/screen/S-alexq
total 6
drwx------ 2 alexq    alexq  4096 Jul 29 17:26 .
drwxrwxr-x 5 root     screen 4096 Jul 21 21:33 ..
prwx------ 1 alexq    alexq     0 Jul 29 17:46 20270.pts-14.myhost

Mas quando estou conectado (sem estar em uma sessão de tela), não consigo encontrar minha sessão existente:

$ screen -ls
No Sockets found in /tmp/uscreens/S-alexq.

Com base neste pergunta Eu tentei configurar a variável de ambiente SCREENDIR para / var / run / screen / S-alexq Mas quando eu faço essa tela ainda não consigo encontrar as sessões :

$ export SCREENDIR=/var/run/screen/S-alexq
$ screen -ls
No Sockets found in /var/run/screen/S-alexq.

$ export SCREENDIR=/var/run/screen
$ screen -ls
You are not the owner of /var/run/screen.

O que estou realmente confuso é que quando eu substituo a tela inicial por "screen -ls" no meu arquivo ~ / .zshrc eu recebo o seguinte impresso no console:

There are screens on:
    20270.pts-14.myhost   (Attached)
1 Sockets in /var/run/screen/S-alexq.

Então, por algum motivo, a tela durante meu login no ssh pode encontrar a sessão existente, mas quando estou na tela do console não consigo encontrar a sessão.

Alguém pode me ajudar a descobrir por que a tela só pode ver as sessões durante meu login no ssh e não depois?

    
por Alex Q 29.07.2015 / 20:29

1 resposta

2

Você tem duas cópias de screen . Um deles armazena suas sessões em /tmp/uscreens e o outro armazena suas sessões em /var/run/screen , para que elas não vejam as sessões umas das outras.

Mesmo se você pudesse forçá-los a ver as sessões uns dos outros, há uma chance de que as cópias de screen sejam versões diferentes e coisas ruins aconteceriam se os dois conversassem entre si. No entanto, em qualquer caso, você já observou que não permite forçar o uso de um diretório de sessão diferente usando $SCREENDIR e essa é uma medida de segurança (porque screen é privilegiado, provavelmente setuid ou setgid, depende do sistema operacional e configuração exatos).

O problema acontece porque você tem um% diferente% co_de dependendo de como exatamente você logou.

A solução é usar a mesma cópia de tela para retomar uma sessão como foi usada para iniciá-la. Ou você pode desabilitar ou desinstalar uma das cópias de $PATH para remover a possibilidade de confusão futura.

    
por 29.07.2015 / 20:46