SCREEN para consolidar sessões SSH

Saudações ao leitor,

Inicialmente meus parabéns ao Franklin pela iniciativa de criar o CIALINUX, iniciar os conteúdos e me convidar para contribuir.

Me chamo Hudson Murilo dos Santos e espero contribuir para a formação NERD de cada leitor interessado nos mesmos assunto que a gente do CIALINUX. A idéia é justamente o que o Franklin comentou no POST inicial… prover documentação interessante em idioma português, resumida e acima de tudo: prática e exemplificada.

Então vamos lá:

Você é um adminitrador de redes e/ou servidores/estações de trabalho Linux e está cansado de abrir conexão SSH para diversas máquinas todo dia demanhã no seu ambiente de trabalho?

Está cansado das “abas” do seu gnome-terminal ou do famoso konsole no KDE?

Para quem ainda não conhece, o screen (text-based) é um emulador de terminal que  permite que o usuário “pinte e borde” com os terminais, podendo fazer quantas áreas quiser, nomear as áreas, fazer split da tela, abrir sessão colaborativa, proteger com senha, deixar executando em background, recuperar sessão perdida, salvar uma cópia da tela em modo texto, dentre outros.

Unindo o útil à necessidade do usuário de se livrar das “abas”, é possível utilizar o screen para criar diversas áreas de aceesso em diversas máquinas com apenas uma janela do xterm aberta na área de trabalho do modo gráfico por exemplo.

Eis o cenário:

Utilizando este software magnífico chamado screen, você tem a opção de elencar uma de suas máquinas (de preferência uma que tenha alto nível de uptime na rede) para ser o seu ponto único de acessos SSH. Vamos nomear essa máquina centralizadora como labscreen. Chegando até ela, via SSH, você executa o screen e dentro dele cria uma área(um bash onde você abrirá uma conexão ssh) para cada máquina que desejar, sem limites.

Primeiro vamos criar o ambiente para o screen poder executar de maneira recomendada.

Mãos à obra..

Na máquina labscreen, você deve ter um sistema operacional linux qualquer com o pacote do screen instalado. O pacote do software pode ser encontrado no site oficial [1].

O primeiro passo é entrar com SSH na máquina labscreen e criar um usuário com uma senha no sistema operacional:

[hudson@minhaestacao ~]# ssh root@labscreen
root@labscreen’s password:
[root@labscreen ~]# adduser screenuser
[root@labscreen ~]# passwd screenuser

Feito isso,  supondo que você queira consolidar o acesso à 10 máquinas, vamos criar o arquivo perfil do screen com as instruções. Este arquivo fica no diretório home do usuário, com nome .screenrc:

[root@labscreen ~]# cd /home/screenuser/
[root@labscreen ~]# cat > .screenrc
hardstatus alwayslastline “[%c] ->  %w”
screen -a -t “maquina 01 – 192.168.0.1” ssh admin@192.168.0.1
screen -a -t “maquina 02 – 192.168.0.2” ssh admin@192.168.0.2
screen -a -t “maquina 03 – 192.168.0.3” ssh admin@192.168.0.3
screen -a -t “maquina 04 – 192.168.0.4” ssh admin@192.168.0.4
screen -a -t “maquina 05 – 192.168.0.5” ssh admin@192.168.0.5
screen -a -t “maquina 06 – 192.168.0.6” ssh admin@192.168.0.6
screen -a -t “maquina 07 – 192.168.0.7” ssh admin@192.168.0.7
screen -a -t “maquina 08- 192.168.0.8” ssh admin@192.168.0.8
screen -a -t “maquina 09  192.168.0.9” ssh admin@192.168.0.9
screen -a -t “maquina 10 – 192.168.0.10” ssh admin@192.168.0.10
ctrl+d aqui para parar de concatenar

[root@labscreen ~]# chown screenuser:screenuser .screenrc
[root@labscreen ~]# chmod 755 .screenrc
[root@labscreen ~]# exit

Nesse ponto, o trabalho como root na máquina labscreen terminou.

A primeira linha do arquivo .screenrc que criamos indica que o screen abrirá já com a barra de status sempre no rodapé (hardstatus alwayslastline) e contendo a hora (%c) e os nomes das áreas.

As dez linhas na sequência são as dez áreas que o screen criará automaticamente, especificando o título/nome da janela com o parâmetro “-t” e  em seguida o comando ssh para o IP correspondente à cada máquina.

Agora vamos abrir o screen pela primeira vez na máquina labscreen, já como usuário comum (screenuser):

[hudson@minhaestacao ~]# ssh screenuser@labscreen
screenuser@labscreen’s password:
[screenuser@labscreen ~]# screen -a

Nesse momento você já está dentro do screen, e após acertar a senha para acesso SSH em cada máquina,  em cada área do screen,  terá um centralizador de acesso SSH pronto para uso. Uma observação importante é que usando esse modelo de .screenrc você tem pouco tempo para acertar todas as senhas de todas as sessões SSH que você configurou para o screen abrir simultaneamente. Pode ser necessário aumentar o timeout nos parâmetros dos seus serviços sshd ou então não colocar o comando ssh para cada área do screen automaticamente.

Para usufruir do screen, segue os principais atalhos, sabendo que é semelhante à navegação em abas de um terminal qualquer,  mas você está em apenas um ;)…

O principal atalho que você deve conhecer é o coringa do screen: O FAMOSO CONTROL+A
O ctrl+a fará com que tudo que você digitar após ele, seja interpretado pelo screen como uma requisição a ele.
Outra dica importante é que os atalhos do screen são CASE SENSITIVE, ou seja, a ação de um atalho chamado com letra maiúscula pode ser diferente se for chamado com letra minúscula.

ATALHOS DO SCREEN:

Atalho para help: ctrl+a+?
Pular pra área seguinte: ctrl+a+n ou então ctrl+a+barra_de_espaço
Pular pra área anterior: ctrl+a+p ou então ctrl+a+tecla_backspace
Alternar entre a área anterior e a atual: ctrl+a+a
Acionar um pequeno browser para escolher a área desejada: ctrl+a+”
Criar uma nova área: ctrl+a+c
Nomear ou alterar o nome de uma área: ctrl+a+A
Salvar uma cópia da tela modo texto: ctrl+a+h
Excluir a área atual: ctrl+a+k
Dividir uma área (split): ctrl+a+S
Alternar entre áreas divididas: ctrl+a+tecla_tab
Sair das áreas dividida e voltar à uma só: ctrl+a+Q
Deixar sessão atual do screen em background: ctrl+a+d
Encerrar sessão atual do screen (cuidado pois esse atalho finaliza todas as áreas abertas): ctrl+a+

Sempre que você encerrar uma sessão do screen, tanto com o atalho ctrl+a+ quanto fazendo “exit” ou ctrl+a+k em todas as áreas verá a seguinte mensagem na tela:

[screen is terminating]

Para verificar se existem sessões sendo executadas em background para recuperar, utilize o seguinte comando:

[screenuser@labscreen ~]# screen -ls
No Sockets found in /home/screenuser/.screen.

Essa mensagem acima indica que não tem sessão screen sendo executada em background pra você recuperar.

Caso tenha apenas uma sessão para recuperar, use o parâmetro -x conforme comando:

[screenuser@labscreen ~]# screen -x

Neste momento você recuperou sua única sessão do screen que estava sendo executada.

Caso tenham duas ou mais sessões, você verá o seguinte output com o parâmetro -ls:

[screenuser@labscreen ~]# screen -ls
There are screens on:
23238.pts-3.labscreen    (Detached)
23233.pts-3.labscreen    (Detached)
2 Sockets in /home/screenuser/.screen.

Então terá que recuperar passando o parâmetro -x e também escolhendo a sessão desejada,  conforme exemplo:

[screenuser@labscreen ~]# screen -x 23238.pts-3.labscreen

Se você desejar, pode configurar uma senha para ser exigida ao recuperar uma sessão do screen.

Para configurar a senha faça o seguinte:

Dentro do screen, utilize o atalho ctrl+a+: e quando aparecer a linha de comando do screen com “:” (dois pontos) digite o comando password. O screen solicitará senha e confirmação e armazenará a senha criptografada no buffer do screen. Para colar essa senha de forma criptografada, utilize o atalho ctrl+a+] .

Após isso, para que essa senha fique configurada para as próximas vezes que o screen for iniciado, você poderá editar o arquivo .screenrc dentro do seu home e adicionar o comando password e pressionar o atalho ctrl+a+] para colar a sua senha criptografada.

Exemplo de .screenrc com a senha “teste” configurada:

password MNNixcF3JAQC6
hardstatus alwayslastline “[%c] ->  %w”
screen -a -t “maquina 01 – 192.168.0.1” ssh admin@192.168.0.1
screen -a -t “maquina 02 – 192.168.0.2” ssh admin@192.168.0.2
screen -a -t “maquina 03 – 192.168.0.3” ssh admin@192.168.0.3
screen -a -t “maquina 04 – 192.168.0.4” ssh admin@192.168.0.4
screen -a -t “maquina 05 – 192.168.0.5” ssh admin@192.168.0.5
screen -a -t “maquina 06 – 192.168.0.6” ssh admin@192.168.0.6
screen -a -t “maquina 07 – 192.168.0.7” ssh admin@192.168.0.7
screen -a -t “maquina 08- 192.168.0.8” ssh admin@192.168.0.8
screen -a -t “maquina 09  192.168.0.9” ssh admin@192.168.0.9
screen -a -t “maquina 10 – 192.168.0.10” ssh admin@192.168.0.10

Neste momento, usando a opção password, estamos com um centralizador de acessos SSH configurado e de certa forma seguro, pois depende de duas senhas para chegar até as sessões SSH.

Para fazer uma sessão colaborativa, vamos usar o cenário de um professor lecionando para cinco alunos em um laboratório de faculdade.

Todos os cinco alunos e inclusive o professor, deverão acessar via SSH a máquina labscreen e fazer o comando screen -x para recuperar a sessão que está aberta em background.

Nesse momento, tudo que o professor digitar na tela do screen, os aluno estarão vendo em sua estação de trabalho.

Por: Hudson Murilo dos Santos

[1] – http://www.gnu.org/software/screen/screen.html

Fonte de pesquisa:
man screen
ctrl+a+?
http://tinyurl.com/6zjnqj

4 thoughts on “SCREEN para consolidar sessões SSH

  1. Mais uma pérola do mundo do pinguim… Obrigado pora aceitar ser contribuinte deste Blog, que na verdade foi uma idéia conjunta nossa.

    Com certeza virão muitos outros exelentes posts, pois conteúdo é oque não falta…

    Franklin Moretti (cialinux)

  2. Ótim texto, muito bem escrito, e com certeza com informações úteis pros usuários de Linux!
    Parabéns pela iniciativa, e continue o trabalho!
    Tens uma imensa bagagem de informação pra essa rapaziada, tá aqui um bom espaço para mostrá-la!
    E as palavras não são só de uma namorada curuja não! =P
    É tb de quem admira teu empenho profissional!

    Bejo Namarido!
    Parabéns!!
    =**

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *