¿Cómo puedo usar ssh para ejecutar un comando en una máquina Unix remota y salir antes de que se complete el comando?

17

¿Cómo puedo usar ssh para ejecutar un comando en una máquina Unix y salir antes de que se complete el comando?

Por ejemplo, si escribo

ssh localhost 'sleep 60 &'

ssh se cuelga en mi terminal hasta que se completa el sueño, a pesar de que el sueño se ejecuta en segundo plano.

Richard Hoskins
fuente
Probablemente quieras el &exterior de las comillas.
Brad Gilbert
1
No, eso solo pone todo el kit y el kaboodle en segundo plano y no puedo escribir mi contraseña.
Richard Hoskins el

Respuestas:

19

SSH tiene un modificador -f que hace exactamente lo mismo que usar nohup en su cliente pero hace posible que ssh solicite una contraseña. Úselo así:

ssh localhost -f 'command'

Pero : SSH seguirá viviendo en segundo plano, por lo que si cierra el cliente antes de que finalice el comando en el servidor, se cancelará. Si desea que la conexión ssh se cierre después de ejecutar el comando, puede usar la pantalla en el lado del servidor:

ssh localhost -f 'screen -d -m sleep 60'
Martín
fuente
Si hago 'ssh remotemachine -n' comando de ejecución larga> withremoteredirects 2> & 1 </ dev / null & 'y el cliente se cierra, ¿se completará el comando?
Richard Hoskins el
Afaik no. Si se pierden las conexiones ssh, el demonio ssh debe terminar todos los terminales "dentro" de ssh. Respuestas desde que el terminal inició el comando en el que terminarían, ya que finalizó su proceso principal. Pero vale la pena intentarlo;)
Martin
¿Qué pasa con 'nohup' en lugar de 'pantalla' en el lado del servidor?
Richard Hoskins el
@Brad Gilbert ¿Nada? Se me ocurren algunas cosas, pero una cosa que no tienen en común es que la 'pantalla' no está disponible en todas las máquinas POSIX.
Richard Hoskins el
6

Utilice nohup, redirección stdout / stderr y ejecute el comando en segundo plano:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

EDITAR: O incluso mejor, solo use el parámetro -f de ssh:

ssh -f localhost 'sleep 60'
neu242
fuente
Probablemente podría combinar las dos redirecciones con &>/dev/null.
Brad Gilbert el
@BradGilbert Esa sintaxis no es compatible con POSIX; Es difícil argumentar a favor de sacrificar la compatibilidad para salvar algunos caracteres.
tripleee
2

O, después de iniciar sesión con el uso ssh, comience screensi desea volver más tarde, para ver el progreso o la salida.

Arjan
fuente
También puede usar "tmux", que personalmente me parece más fácil de configurar. Ambas aplicaciones son prácticamente equivalentes y cada una tiene sus ventajas y desventajas.
mzuther