Recuperando uma sessão SSH
Piter PUNK
Quantas vezes você já não passou por isso, enquanto estava
editando um script, ou aguardando a saída de um comando
demorado, a sua linha telefônica cai e todo o trabalho vai
por água abaixo. Agora você pode sair de uma conexão e voltar
de onde parou, utilizando o screen.
1. Introdução
O screen é um gerenciador de janelas em modo texto; com ele é
possível ter várias sessões dentro de um mesmo terminal, você pode dividir
a tela em duas janelas (como no splitvt), copiar e colar sem mouse, entre
outras características.
Muita gente usa o screen nas tarefas do dia-a-dia,
como responder e-mails em uma janela, falar no irc em outra e ainda ter
uma shell em uma terceira... agora, iremos utilizar os recursos do
screen para preservar as nossas conexões remotas.
2. Resuminho...
Antes de mais nada, um resuminho dos comandos do screen,
para ajudar o pessoal que ainda não conhece essa maravilha.
A primeira coisa que você deve aprender é: para entrar com
um "comando", é necessário teclar primeiro
ctrl+a. Os comandos básicos são:
- d -> desconecta da tela atual (mas deixa tanto o screen
quanto a tela rodando em background)
- c -> cria uma nova tela
- n -> vai para a próxima tela
- 0-9 -> troca de janela (você pode ter até 10 janelas e
intercalar entre elas)
- ? -> Help com os comandos.
Se você quiser saber mais, consulte a página de manual (que
é bem completa e explicativa)
3. Mãos a obra
Agora que já estamos extremamente craques no uso do screen,
vamos ao que nos motivou a escrever este artigo. Um dos
nossos primeiros itens é um script que vamos colocar no
lugar do .bash_profile (se você não tiver nenhum, vai passar
a ter agora).
Este novo .bash_profile é para ser colocado no seu $HOME
da máquina remota, ele é lido toda vez que ocorre que o
bash é chamado via login (ou quando você passa a opção -ls
para o seu "xterm" favorito).
Assim, toda vez que você logar, ele será executado.
O script é bem simples e está muito bem comentado... depois
que você digitá-lo, basta copiar para o seu $HOME na máquina
remota que você quer acessar.
3.1. O script
# .bash_profile
#
# verifica se existe um .bashrc, se existir, executa-o
#
if [ -e .bashrc ]; then
source .bashrc
fi
#
# verifica se existe alguma tela desconectada
#
DETACH=`screen -ls | grep -c "Detached"`
#
# Se houver mais que uma, lista as seções na tela com
# o comando para recuperá-las
#
if [ $DETACH -gt 1 ]; then
screen -ls
echo "You can reattach one of detached session using:"
echo -e "\tscreen -r nnnn.tty.host\n"
#
# Se houver apenas uma sessão aberta, ele conecta
# automaticamente, sem precisar de comando nenhum.
#
elif [ $DETACH -eq 1 ]; then
SESSION=`screen -ls | grep "Detached" | awk '{print $1}'`
screen -r $SESSION
#
# Se houver menos que uma sessão (ou seja, nenhuma) aciona
# um novo screen
#
else
screen -a
fi
4. Testando
Agora, depois do script digitado e copiado para o $HOME da
máquina remota, restou o teste. Conecte na máquina remota,
você verá que ele irá conectar automaticamente no screen.
Digite algum comando, pode ser um ls por exemplo. Agora
derrube a conexão (se você estiver em um xterm, basta fechar
a janela) e conecte novamente. Você retornou diretamente
à última tela em que estava! É mágica! -:)
Se você quiser sair e manter o screen rodando, utilize o
comando ctrl+a d e desconecte da tela em que você está com
o screen e depois saia normalmente do SSH com o comando
exit. Na próxima vez que você acessar a máquina remota,
você irá reconectar automaticamente retornando de onde parou
antes do ctrl+a d.
5. Conclusão
O screen é extremamente versátil e útil, e agora descobrimos
mais uma utilidade para ele. Acessar através de linhas instáveis
ou lentíssimas se torna bem mais fácil com a possibilidade
de restaurarmos uma sessão de onde paramos. Qualquer dúvida,
elogio ou crítica a respeito deste artigo ou até mesmo sugestões
para novos artigos, mande um e-mail para
piterpk@terra.com.br.
|