Como posso ligar a saída de um terminal de outro terminal?

40

Eu preciso ligar na saída do terminal atualmente em execução (tty1) do terminal virtual e capturá-lo (executando o servidor X).

    
por AoeAoe 13.04.2013 / 22:28

7 respostas

21

Me deparei com essa ferramenta chamada ttylog . É um programa Perl disponível no CPAN aqui . Há algumas ressalvas, uma delas é que eu só consegui descobrir como conectar a um terminal que foi criado como parte de alguém que está na minha caixa. O outro é que você tem que executá-lo com privilégios elevados (ou seja, root ou sudo).

Mas funciona!

Por exemplo

Primeiro o ssh no seu box no TERM # 1:

TERM#1% ssh saml@grinchy

Observe o novo tty do terminal:

TERM#1% tty
/dev/pts/3

Agora, em outro terminal (TERM # 2), execute este comando:

TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]

Agora volte para TERM # 1 e digite coisas, ele aparecerá no TERM # 2.

Todos os comandos que experimentei (top, ls, etc.) funcionaram sem incidentes usando ttylog .

    
por 14.04.2013 / 00:44
20

Realmente é. Os dispositivos / dev / vcs * e / dev / vcsa * correspondem aos dispositivos / dev / tty * (os terminais virtuais). F1 = tty1 = vcs1 / vcsa1 e assim por diante. O vcs / vcsa é como o tty para o terminal virtual "atual".

Como root, você pode simplesmente ativar esses dispositivos (por exemplo, cat / dev / vcs2) e ver o que está no VT correspondente (por exemplo, / dev / tty2, o on em F2), como tirar uma foto instantânea. vcsa * difere de vcs * em que eles incluem informações sobre as dimensões do terminal (a tela). Lembre-se, é apenas um instantâneo bruto dos personagens como eles mostram na tela - reunidos a partir da memória alocada para o terminal - então não espere uma saída agradável e fácil de analisar.

A desvantagem é que, se as informações passarem rápido demais, pode ser difícil capturá-las. Talvez tail -f / dev / vcs1 funcione, se você precisar seguir vários screenfulls (não tentei eu mesmo)? Pode ser mais fácil simplesmente redirecioná-lo para um arquivo primeiro. Também pode ser uma boa idéia usar um VT (F1-F6) para examiná-lo, já que os terminais terão as mesmas dimensões. Na minha experiência, é melhor usar os dispositivos vcs * - não os vcsa *.

Se isso não funcionar, talvez um dos pacotes "big brotherish" que permite que um administrador fique de olho na atividade em um terminal funcione.

PS: Esqueci de perguntar qual sistema operacional você usa. Isso é para o Linux, embora dispositivos semelhantes provavelmente também existam em outros sistemas operacionais. Tente procurar por "memória do console virtual" entre as páginas de manual dos dispositivos.

    
por 14.04.2013 / 00:11
15

veja:

man 1 script

por exemplo:

script -f /dev/tty1
    
por 24.01.2015 / 12:01
4

Use o comando tty em cada terminal para identificá-los:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

Assumindo que esses TTYs redirecionam o primeiro do stdout para o segundo, execute-o no primeiro terminal:

exec 1>/dev/pts/1

Note: Now every command output will show on pts/1

Para restaurar o comportamento padrão stdout de pts / 0:

exec 1>/dev/pts/0

Veja este vídeo para uma demonstração.

    
por 29.09.2017 / 20:22
2

Isso funcionou para mim:

  • Usando um teclado no computador "A" (ou seja, o computador físico que deve ser controlado), execute: screen -q

  • Conecte-se com ssh do computador "B" ao computador "A".

  • Na sessão ssh, digite: screen -ls para obter um ID de sessão para conectar-se a (4 dígitos na linha que contém tty ).

  • Conecte-se à sessão acima com: screen -x <session id> ... usando o número do ID da sessão recebido do comando screen -ls acima.

Qualquer coisa digitada em "sessão" acontecerá em ambas as "sessões", portanto, por exemplo, digitar screen -d irá encerrar AMBAS as sessões.

    
por 16.12.2015 / 08:45
1

Outra abordagem é usar o utilitário gnu screen em sua máquina local. Invoque-o com a opção -L ou inicie sem essa opção e use a sequência de comandos ^aH . Qualquer abordagem faz com que todas as entradas & saída para ser registrado em um arquivo chamado screenlog.x , onde x é o número da tela.

Isso é útil porque nada extra precisa ser instalado na máquina remota.

    
por 13.07.2014 / 17:46
1

Como eu não comecei o tty1 com a tela, este script ajudou:

Eu usei a resposta de Baard Kopperud acima. "128" é uma linha do meu tty1. A suspensão pode ser configurada para um número apropriado.

#!/bin/bash
while true
do
    sudo tail -c 128 /dev/vcs1 && echo ""
    sleep 10
done

Eu usei isso no terminador e dimensionei a coluna para que a rolagem fosse uma linha de texto.

    
por 23.10.2015 / 15:44