Como assistir a uma janela do terminal remotamente?

8

Saí do escritório mais cedo com uma janela de terminal ativa executando um script em um servidor Centos 7. Agora eu tenho SSHing em casa e quero ver para onde ele deve chegar. Isso é possível? Posso voltar à mesma janela do terminal a partir daqui?

samerivertwice
fonte
Possível duplicado: unix.stackexchange.com/questions/367370/...
Jakuje
Eu também gostaria de adicionar tmate.io a todas as respostas abaixo
webKnjaZ 29/17
Uma opção é: strace -e write -p 12345(substitua o pid do processo em que você está interessado). Outra opção é: strace -e read -p 12345(substitua o pid do emulador de terminal). Em princípio, seria possível escrever um programa para usar a ptracechamada do sistema para coletar as informações da mesma maneira que stracefaz e gravá-las diretamente em seu próprio terminal. Não sei se esse programa existe, mas cobriria os requisitos especificados em sua pergunta.
Kasperd 01/07
de uma maneira possível, ative o RPC (chamadas de procedimento remoto) no computador de destino e, em seguida, você pode (remotamente) conectar e controlar a tela, incluindo janelas individuais. Nota: isso abre uma vulnerabilidade, portanto, desative o RPC quando terminar.
user3629249

Respostas:

14

Como o @Sven mencionou, a melhor opção é usar screenor tmux. Essas são ferramentas conhecidas como "multiplexadores de terminal". Eles permitem criar sessões de shell que podem ser anexadas e desanexadas dos logins reais. Essas ferramentas não são úteis apenas para verificar seu trabalho em outro terminal, mas têm outros recursos, incluindo compartilhar sua sessão com outro usuário e garantir que seu comando não pare se você perder sua conexão com a Internet. Se você estiver procurando screen, tente uma pesquisa por "Tela GNU". Ambas as ferramentas estão disponíveis na maioria dos sistemas Linux.

Normalmente, você iniciaria a sessão e executaria seu comando dentro dessa sessão. No entanto, se você já iniciou o comando, pode consultar um artigo sobre como mover um comando em execução para uma sessão de tela. Eu não recomendaria tentar isso pela primeira vez em algo importante, no entanto. Esta pergunta pode ser útil:

Movendo um processo já em execução para Screen

Se você quiser apenas verificar se o processo está em execução, minha ferramenta favorita seria strace. Essa ferramenta permite que você veja cada chamada do kernel feita por um processo. Pode ser necessário um pouco de habilidade para entender a saída, mas pelo menos você deve ter uma idéia se o processo estiver em execução e se você prestar atenção o suficiente, poderá pegar os nomes de arquivos que estão abrindo. Para fazer isso, primeiro, encontre o PID, talvez pesquisando ps aux|grep yourcommande depois:

strace -fp YOUR_PID

Você pode ^ C para sair disso. Pode não permitir que você se reconecte, mas se você quiser apenas saber o que está fazendo, isso deve ser suficiente.

DKing
fonte
Por que não permitir que você se reconecte?
HSchmale
@ HSchmale Não tenho certeza se entendi sua pergunta. Se você está se referindo ao strace, esse programa não fornece um terminal para você. Apenas mostra as chamadas do kernel que estão sendo feitas. Muitas vezes, quando suspeito que um processo está travado, o strace me mostrou os arquivos exatos em que está trabalhando no momento, para que eu saiba onde ele está e que não está travado.
DKing
Foi um erro de leitura por mim. Achei que você não seria capaz de conectar novamente o traço a ele, mas você queria conectar um terminal a ele.
HSchmale
9

Uma maneira de fazer isso: TMUX

Como a maioria das respostas já apontou - se em uma sessão SSH existente - você usa tmux(ou screen) com o comando

tmux

Agora você está em uma nova sessão do bash, na qual pode iniciar seu programa / comando. Você pode fechá-lo a qualquer momento (mas não com CTRL + D, fechando a janela) e retorná-lo posteriormente, construindo uma conexão SSH com o mesmo usuário na mesma máquina e escrevendo o comando

tmux attach

Você também pode ter várias tmux sessões, dando-lhes nomes com

tmux new -s myname

Você pode ver uma lista de todas as tmuxsessões abertas para seu usuário com

tmux ls

e anexar a uma tmuxsessão nomeada com

tmux a -t myname

Encontre um abrangente tmux cheat sheet aqui .

Para um programa em execução

As respostas até agora parecem não estar cientes do fato de que você pode mover um processo já em execução para outro tmux/ screencomo essa resposta aponta. O programa que faz o trabalho é chamado reptyre, no Ubuntu / Debian, você pode instalá-lo com um simples

sudo apt-get install reptyr

Depois disso, descubra o ID do processo do seu programa em execução (por exemplo, com topou htop), inicie uma tmuxsessão e um simples

reptyr PID

anexará novamente o processo em execução à sua tmuxsessão do bash.

Manu CJ
fonte
5

No futuro, você pode usar screenou tmuxe pode, em seguida, recoloque a sessão em execução.

Sven
fonte
3

Estou usando o byobu e acho incrivelmente poderoso. Byobu é um gerenciador de janelas e um multiplexador de terminal baseados em texto de código aberto GPLv3.

Para abrir uma sessão de byobu, basta digitar "byobu". E então você pode criar uma nova guia com Ctrl + F2 e mover-se entre as guias com Ctrl + F3 para trás, Ctrl + F4 para frente. Você pode fechar uma guia com Ctrl + F6 ou desanexar de uma sessão com Shift + F6. Mais tarde, você se reconectará à sessão simplesmente digitando "byobu" novamente.

O Byobu suporta divisões verticais e horizontais, tela cheia entre outros recursos sofisticados. Está disponível no Ubuntu / Debian, CentOS / Fedora / RedHat e FreeBSD.

David Okwii
fonte
Parece um pouco enganador chamar byobu de um multiplexador de terminal. É realmente apenas um front-end para tmuxe screenque muitos acham fornece uma experiência de usuário melhor do que eles fazem de imediato.
B: Camada B
2

Como já foi apontado, eu recomendo usar tmuxou screenno futuro, mas isso só funciona se você pensar sobre isso com antecedência.

Eu já estive na sua situação algumas vezes. Se o terminal que você deixou em execução estava no PC de mesa do escritório, você pode fazer o SSH no PC e iniciar um servidor VNC. Dessa forma, você pode pelo menos verificar o terminal aberto.

Pablo Montepagano
fonte
0

Como todos mencionaram, o tmux pode ser usado. tela não é útil onde você deseja compartilhar a tela com várias pessoas.

Acima de tudo, recomendo a todos que experimentem https://tmate.io/ para dar acesso temporário, mesmo à máquina local. O tmate suporta todos os itens acima :)

https://tmate.io/

Anto
fonte