Eu gostaria de usar screen para manter as sessões ssh ativas no meu servidor. Seria bom se eu pudesse retomar automaticamente qualquer sessão em execução para meu usuário ao fazer login. A maneira direta de fazer isso seria adicionar "screen -r" ao meu .bashrc, e isso parece funcionar bem. Só estou me perguntando se isso quebrará alguma coisa em condições que ainda não testei. Alguém com experiência aqui pode me dizer se é isso que devo fazer?
Responder1
Você precisa screen -R -d
se conectar automaticamente a uma sessão existente, se existir, e criar uma sessão caso contrário.
Assegure-se de que vocêfaça isso apenas em shells interativos. Fontes Bash ~/.bashrc
mesmo para shells não interativos quando seu processo pai é rshd ou sshd (isso é mencionado na documentação, mas é fácil de ignorar). Você pode dizer que um shell é interativo porque $-
contém i
.
case $- in
*i*) screen -Rd;;
esac
Isso não permitirá que você execute sessões de tela diferentes em terminais diferentes.
Você precisará se desconectar da tela e sair do shell pai para fazer logout. Isso pode ser resolvido usando exec screen
em vez de screen
.
Se você iniciar um shell diferente de login, você será colocado na tela, o que não é o que você deseja na maioria das vezes. Eu restringiria isso pelo menos quando você estiver executando diretamente em uma sessão ssh interativa, com algo como o seguinte em seu ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Tenha cuidado ao fazer coisas complexas com o seu, .bashrc
pois um erro que causa a saída do shell dificultaria o login.
O que eurecomendaré não modificar seus arquivos de inicialização do shell no servidor, mas sim executar a tela explicitamente do cliente, como em
ssh -t host.example.com screen -R -d
(Você provavelmente criaria um alias de shell ou um atalho de ambiente de área de trabalho no cliente.) Dessa forma, você pode facilmente optar por não executar a tela, especificar um nome de sessão alternativo e assim por diante.
Responder2
Seus scripts de inicialização do servidor X geralmente iniciam um novo shell, por exemplo, se você estiver logando usando o gdm usando a "Sessão Definida pelo Usuário".
Acho que qualquer coisa que não saia pode fazer com que a inicialização do X trave. Isso incluiria screen -r
.