¿Cuál es la mejor manera de ejecutar un comando ssh remoto en segundo plano pero que aún se muestra?

14

Necesito ejecutar comandos SSH de forma remota con la salida que se muestra localmente. Pero si la conexión se rompe, quiero que el comando aún se ejecute.

No estoy hablando tanto de iniciar sesión y ejecutar, sino de hacer ssh user @ remotehost 'comandos && command, etc.'

¿Cómo puedo asegurarme de que el comando se ejecuta incluso si se interrumpe la conexión?

vfclists
fuente

Respuestas:

26

La mejor manera de hacerlo es usando la pantalla, que mantiene la sesión abierta de forma persistente incluso si la conexión se corta (y si desea comenzar a usarla nuevamente, puede hacer una screen -ry se abrirá nuevamente).

Prefijar cualquier comando que desee ejecutar screen(por ejemplo ssh -t user@host screen command) debería hacer el trabajo.

Si desea que se ejecute en el fondo del shell, también puede agregar un &a todo.

Falcon Momot
fuente
Es probable que necesite usar ssh -t para asignar un terminal para que se ejecute el comando. De lo contrario, el error es "Debe estar conectado a un terminal".
bonsaiviking
11

¿Está buscando tener una sesión persistente que pueda reanudar, o simplemente para evitar que una desconexión mate la exención?

En el primer caso, el uso screen, para este último, nohup.

Shane Madden
fuente
7

Como se mencionó anteriormente, screenpuede hacer todo el truco. Pero no solo lo que necesitas. He usado la pantalla durante años y ahora la uso cada vez que inicio sesión en los sistemas. Intenta instalar screeny crear ~/.screenrccon dicha configuración:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Entonces corre screen -Rd vcf. Esa es la invocación preferible de la pantalla. Se volverá a conectar a la sesión creada anteriormente con el nombre vcf * (o se le advertirá si es ambiguo) o, si la sesión aún no se abrió, se creará. CTRL+ Aes una meta clave que hace todo. CTRL+A C( CTRL+ A, luego C) crea una nueva ventana (pantalla) dentro de la sesión. CTRL+A SPACEmueve el foco a la siguiente ventana en una ronda. CTRL+A Ddesconecte la sesión actual manteniendo todas las ventanas funcionales entre conexiones. Si ha ejecutado una tarea muuuuuuuuuuuuuuuuuuuu como se puede separar de la pantalla y volver a conectarla más tarde para ver qué sucede. Lo mismo sucede si se pierde su sesión ssh: la pantalla permanece viva con todas las ventanas abiertas y todas las tareas iniciadas.

Si desea cerrar alguna ventana dentro de la pantalla, solo exitdesde el shell en ella. Si desea cerrar todos los shells / tareas en todas las ventanas y salir de la pantalla, simplemente presione CTRL+A CTRL+\y presione "Y" cuando se le solicite.

Para todo lo demás ver la pantalla del hombre.

Kondybas
fuente
2

He visto esta alternativa a una conexión confiable "me gusta" de ssh:

http://mosh.mit.edu/

Rodrigo Prior Bechelli
fuente
Desde el sitio, mosh (shell móvil) parece una nueva herramienta prometedora. Sin embargo, es muy nuevo.
bgvaughan
1

Yo generalmente haría:

nohup mycommand &

tail -f nohup.out
Gyin
fuente