Piter Punk's HomePage - Artigos
 
English version
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.


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004