¿Cómo puedo ver una ventana de terminal de forma remota?

8

Salí de la oficina antes con una ventana de terminal activa que ejecutaba un script en un servidor Centos 7. Ahora tengo SSHing desde casa y quiero ver a dónde llega. es posible? ¿Puedo volver a unirme a la misma ventana de terminal desde aquí?

Samerivertwice
fuente
También me gustaría agregar tmate.io a todas las respuestas a continuación
webKnjaZ
Una opción es: strace -e write -p 12345(sustituir el pid del proceso que le interesa). Otra opción es: strace -e read -p 12345(sustituir el pid del emulador de terminal). En principio, sería posible escribir un programa para utilizar la ptracellamada del sistema para recopilar la información de la misma manera que lo stracehace, y escribirla directamente en su propio terminal. No sé si existe dicho programa, pero cubriría los requisitos especificados en su pregunta.
kasperd 01 de
de una manera posible, habilite RPC (llamadas a procedimientos remotos) en la computadora de destino y luego puede (remotamente) conectarse y controlar la pantalla, incluidas las ventanas individuales. Nota: esto abre una vulnerabilidad, así que asegúrese de deshabilitar RPC cuando termine.
user3629249

Respuestas:

14

Como @Sven mencionó, la mejor opción es usar screeno tmux. Estas son herramientas conocidas como "multiplexores terminales". Le permiten crear sesiones de shell que se pueden adjuntar y desacoplar de inicios de sesión reales. Estas herramientas no solo son útiles para verificar su trabajo desde otro terminal, sino que tienen otras características, como compartir su sesión con otro usuario y asegurarse de que su comando no se detenga si pierde la conexión a Internet. Si está buscando screen, puede intentar buscar "Pantalla GNU". Ambas herramientas están disponibles en la mayoría de los sistemas Linux.

Por lo general, comenzaría la sesión y luego ejecutaría su comando dentro de esa sesión. Sin embargo, si ya ha iniciado el comando, es posible que desee buscar un artículo sobre cómo mover un comando en ejecución a una sesión de pantalla. Sin embargo, no recomendaría probar esto la primera vez en algo importante. Esta pregunta puede ser de alguna utilidad:

Mover un proceso que ya se está ejecutando a Screen

Si solo desea verificar si el proceso se está ejecutando, mi herramienta favorita sería extraña. Esta herramienta le permite ver cada llamada al núcleo realizada por un proceso. Puede tomar algo de habilidad entender el resultado, pero al menos debería darte una idea si el proceso se está ejecutando, y si observas lo suficientemente cerca, podría captar los nombres de archivo que está abriendo. Para hacer eso, primero, encuentre el PID, tal vez mediante una búsqueda ps aux|grep yourcommand, y luego:

strace -fp YOUR_PID

Puedes ^ C para salir de eso. Es posible que no le permita volver a adjuntar, pero si solo desea saber qué está haciendo, eso debería ser suficiente.

Ding
fuente
¿Por qué no le permitiría volver a adjuntar?
HSchmale
@HSchmale No estoy seguro de entender tu pregunta. Si te refieres a strace, ese programa no te da una terminal en absoluto. Simplemente le muestra las llamadas del núcleo que se están realizando. Muchas veces, cuando sospecho que un proceso está bloqueado, strace me ha mostrado los archivos exactos en los que está trabajando en este momento, así que sé dónde está y que no está bloqueado.
DKing
Fue un error interpretado por mí. Pensé que no podrías volver a conectarlo directamente, pero querías volver a conectarle un terminal.
HSchmale
9

Una forma de hacerlo: TMUX

Como la mayoría de las respuestas ya señalaron, si está en una sesión SSH existente, usted usa tmux(o screen) con el comando

tmux

Ahora está en una nueva sesión de bash, en la que puede iniciar su programa / comando. Puede cerrarlo en cualquier momento (pero no con CTRL + D, en lugar de cerrar la ventana) y volver a él más tarde creando una conexión SSH con el mismo usuario en la misma máquina y escribiendo el comando

tmux attach

También puede tener varias tmux sesiones dándoles nombres con

tmux new -s myname

Puede ver una lista de todas las tmuxsesiones abiertas para su usuario con

tmux ls

y adjuntar a una tmuxsesión con nombre con

tmux a -t myname

Encuentre un completo tmux cheat sheet aquí .

Para un programa en ejecución

Las respuestas hasta ahora parecen no ser conscientes del hecho de que puede mover un proceso que ya se está ejecutando a otro tmux/ screencomo señala esta respuesta . El programa que hace el trabajo se llama reptyry en Ubuntu / Debian puedes instalarlo con un simple

sudo apt-get install reptyr

Después de eso, descubra el ID de proceso de su programa en ejecución (por ejemplo con topo htop), inicie una tmuxsesión y un simple

reptyr PID

volverá a conectar el proceso en ejecución a su tmuxsesión bash.

Manu CJ
fuente
5

En el futuro, puede usar screeno tmuxy luego puede volver a conectar una sesión en ejecución.

Sven
fuente
3

He estado usando byobu y me parece increíblemente poderoso. Byobu es un gestor de ventanas y multiplexor de terminales basado en texto de código abierto GPLv3.

Por lo tanto, puede abrir una sesión de byobu simplemente escribiendo "byobu". Y luego puede crear una nueva pestaña con Ctrl + F2, y moverse entre pestañas con Ctrl + F3 para retroceder, Ctrl + F4 para avanzar. Puede cerrar una pestaña con Ctrl + F6 o desconectarse de una sesión con Shift + F6. Luego se vuelve a adjuntar a la sesión simplemente escribiendo "byobu" nuevamente.

Byobu admite divisiones verticales y horizontales, pantalla completa entre otras características sofisticadas. Está disponible en Ubuntu / Debian, CentOS / Fedora / RedHat y FreeBSD.

David Okwii
fuente
Parece un poco engañoso llamar a byobu un multiplexor terminal. Realmente es solo un front-end para tmuxy screenque muchos encuentran proporciona una mejor experiencia de usuario que la que ofrecen de inmediato .
B Layer
2

Como ya se señaló, recomiendo usarlo tmuxo screenen el futuro, pero eso solo funciona si lo pensaste de antemano.

He estado en tu situación varias veces. Si el terminal que dejó en funcionamiento estaba en la PC de escritorio de su oficina, puede usar SSH en su PC e iniciar un servidor VNC. De esa manera, al menos puede verificar la terminal abierta.

Pablo Montepagano
fuente
0

Como todos mencionaron, se puede usar tmux. La pantalla no es útil cuando desea compartir la pantalla con varias personas.

Sobre todo, recomiendo a todos que prueben https://tmate.io/ para dar acceso temporal, incluso a localmachine. tmate es compatible con todo lo anterior :)

https://tmate.io/

Anto
fuente