Multiplexação de Terminais


Cyberguard: Linux Luminarium.

Já teve uma conexão SSH interrompida de repente e perdeu todo o seu trabalho? Já quis executar múltiplos terminais sem precisar abrir uma dúzia de janelas? Seja bem-vindo ao mundo da multiplexação de terminais!


Vamos direto ao ponto!

O screen é um programa que cria terminais virtuais dentro do seu terminal. É parecido com ter várias abas no navegador, só que para a sua linha de comando!

Iniciar o screen é extremamente simples:

hacker@dojo:~$ screen

E só isso! Agora você está dentro de uma sessão do screen. Ela se parece exatamente com um terminal convencional, mas existem novos recursos esperando para serem descobertos.

Para este desafio, configuramos tudo para que apenas iniciar o screen conceda a flag a você. Fácil assim!


NOTA: Quando terminar de usar a linha de comando, digite exit ou pressione Ctrl-D para sair da sessão do screen. Em seguida, o screen será finalizado e retornará você à sua shell original.

Agora vamos começar a explorar a mágica do desanexamento (detaching)!

Imagine que você esteja trabalhando em algo importante em uma conexão remota e sua conexão caia. Com um terminal comum (fora deste ambiente incrível do dojo), tudo seria perdido. Com o screen, seu trabalho continua rodando em segundo plano e você pode reconectá-lo (reattach) mais tarde!

Você também pode se desconectar (detach) de propósito, que é o que faremos neste desafio. Você se desconecta pressionando Ctrl-A, seguido de d (de detach). Isso mantém sua sessão rodando em segundo plano enquanto você retorna ao terminal normal.

hacker@dojo:~$ screen
[doing some work...]
[Press Ctrl-A, then d]
[detached from 12345.pts-0.hostname]
hacker@dojo:~$ 

Para se reconectar (reattach), você pode usar o argumento -r no screen:

hacker@dojo:~$ screen -r

Para este desafio, você precisará:

  1. Iniciar o screen
  2. Desconectar-se dele (detach).
  3. Executar /challenge/run (isso enviará a flag secretamente para sua sessão desconectada!)
  4. Reconectar-se (reattach) para ver sua recompensa

CURIOSIDADE: Ctrl-A é a tecla de ativação padrão do screen para todos os seus atalhos. Toda a funcionalidade do screen é acionada por alguma combinação de comandos iniciada com Ctrl-A.

DICA: Lembre-se: segure Ctrl e aperte A, depois solte ambos e aperte d.

DICA: Se você vir [detached from...], você fez certinho!

Hora de bancar o detetive com o screen!

Se você se tornar um usuário frequente do screen, inevitavelmente acabará com múltiplas sessões em execução. Como descobrir qual é a sessão certa para se reconectar?

Bem, nós podemos listá-las:

hacker@dojo:~$ screen -ls
There are screens on:
        23847.mysession   (Detached)
        23851.goodwork    (Detached)
        23855.morework    (Detached)
3 Sockets in /run/screen/S-hacker.

Os identificadores das sessões são compostos pelo PID de cada processo do screen, um ponto e o nome da sessão. Para se conectar a uma específica, utilize o nome ou o PID dela passando-o como argumento para screen -r.

hacker@dojo:~$ screen -r goodwork

Neste desafio, criamos três sessões do screen para você. Uma delas contém a flag. As outras duas são despistes!

Você precisará verificar cada uma até encontrar a correta. Não se esqueça de desconectar (Ctrl-A d) antes de tentar a próxima sessão!

Até agora, o screen parece apenas um tipo curioso de terminal dentro de outro terminal. Mas ele pode ser muito mais!

Dentro de uma única sessão do screen, você pode ter várias janelas, assim como o seu navegador tem várias abas. Isso é extremamente prático para organizar tarefas diferentes!

Essas janelas são gerenciadas por meio de atalhos de teclado, todos iniciando com Ctrl-A:

  • Ctrl-A c - Cria uma nova janela
  • Ctrl-A n - Próxima janela (Next)
  • Ctrl-A p - Janela anterior (Previous)
  • Ctrl-A 0 até Ctrl-A 9 - Pula diretamente para as janelas 0 a 9
  • Ctrl-A " - Abre um menu de seleção com todas as janelas

Para este desafio, preparamos uma sessão do screen com duas janelas:

  • A Janela 0 tem... bem, você terá que alternar para lá para descobrir!
  • A Janela 1 contém uma mensagem de boas-vindas

Conecte-se à sessão com screen -r e, em seguida, use uma das combinações de teclas acima para alternar para a outra janela. Vá em frente e capture essa flag!

Vamos tentar a mesma coisa com o tmux!

O tmux (terminal multiplexer) é o primo mais novo e moderno do screen. Ele faz as mesmas coisas, mas com atalhos de teclado um pouco diferentes. A maior diferença? Em vez de Ctrl-A, o tmux usa Ctrl-B como prefixo de comandos.

Portanto, para desconectar (detach) do tmux, pressione Ctrl-B seguido de d.

hacker@dojo:~$ tmux
[doing some work...]
[Press Ctrl-B, then d]
[detached (from session 0)]
hacker@dojo:~$ 

Os comandos também variam:

  • tmux ls - Lista as sessões
  • tmux attach ou tmux a - Reconecta à sessão

Para este desafio:

  1. Inicie o tmux
  2. Desconecte-se dele (detach).
  3. Execute /challenge/run (isso enviará a flag para sua sessão desconectada!)
  4. Reconecte-se (reattach) para ver sua recompensa

Vamos aprender a navegar pelas janelas no tmux!

Assim como o screen, o tmux possui janelas. As combinações de teclas são diferentes, mas o conceito é o mesmo:

  • Ctrl-B c - Cria uma nova janela
  • Ctrl-B n - Próxima janela (Next)
  • Ctrl-B p - Janela anterior (Previous)
  • Ctrl-B 0 até Ctrl-B 9 - Pula diretamente para as janelas 0 a 9
  • Ctrl-B w - Exibe uma interface visual para seleção de janelas

O tmux exibe suas janelas na parte inferior em uma barra de status parecida com:

[0] 0:bash* 1:bash

O asterisco * indica a sua janela atual, e cada entrada também mostra o processo que a janela foi criada para executar.

Criamos uma sessão do tmux com duas janelas:

  • A Janela 0 contém a flag!
  • A Janela 1 contém as boas-vindas.

Vá em frente e capture essa flag!


30-Day Scoreboard:

This scoreboard reflects solves for challenges in this module after the module launched in this dojo.

Rank Hacker Badges Score