1 votos

Salir de la terminal después de ejecutar SSH "shutdown" Apple (Shell) script para la máquina remota

He hecho un pequeño script de apple (llamando a un script de shell usando ssh) para apagar/hibernar remotamente mi máquina Windows. Exporto el script como aplicación para poder llamarlo fácilmente desde mi búsqueda de raycast.

set question to display dialog "Are you sure you want to hibernate pDesktop?" buttons {"Yes", "No"} default button 1 with icon caution
set answer to button returned of question

if answer is equal to "Yes" then
    do shell script "ssh -t phili@192.168.0.11 'shutdown.exe /h'"
end if

Esto funciona bien, sin embargo después de ejecutar el script (o incluso sólo el comando shell ssh en un terminal), el terminal en mac os se cuelga (porque el servidor remoto cierra la conexión) y tengo que matar el proceso.

¿Hay algún método para evitarlo? ¿O un método mejor/recomendado para enviar remotamente un comando de apagado?

Gracias phil

1voto

Ptit Xav Puntos 146

Puedes intentar ejecutar el comando en el otro host con nohup y en segundo plano (&) :

"nohup ssh -t phili@192.168.0.11 'shutdown.exe /h’ &"

Es posible que tenga que redirigir la salida y el error :

"nohup ssh -t phili@192.168.0.11 'shutdown.exe /h’ >./nohup.out 2>./nohup.err &"

0voto

timoseewho Puntos 60

Intenté la sugerencia nohup ... & solución que no funcionó (pedía alguna entrada en la terminal y al ejecutarse como script se seguía colgando). Luego probé con el nohup ... >./nohup.out 2>./nohup.err & sugerencia pero simplemente no pasaría nada.

Así que jugué con las diferentes opciones tratando de establecer la cuenta atrás para la hibernación a 1 segundo:

ssh -t phili@192.168.0.11 'shutdown.exe /h /t 1' 

Lamentablemente eso no funcionó y recibí un mensaje de error sobre stdin not being a terminal .

Como no sólo quería poder hibernar mi máquina Windows sino también suspenderla, encontré la herramienta psshutdown.exe . Tuve los mismos problemas que la terminal o el apple script se colgaba al ejecutar el comando por ssh con:

ssh -t phili@192.168.0.11 'psshutdown.exe -h -t 0 -accepteula' 

nota: la opción -h aquí es para hibernar.

Después de jugar con diferentes opciones, finalmente encontré cómo puedo hacer que funcione sin colgar:

ssh -t phili@192.168.0.11 'psshutdown.exe -h -t 1 -accepteula' 

Simplemente he cambiado la cuenta atrás de 0 segundos ( -t 0 ) a 1 segundo ( -t 1 ). Supongo que el segundo extra permitía que el script terminara antes de que la máquina remota cerrara la conexión e hiciera colgar el script. Esto funciona tanto para hibernar como para suspender el ordenador Windows. Para esto último simplemente hay que intercambiar -h para -d :

ssh -t phili@192.168.0.11 'psshutdown.exe -d -t 1 -accepteula' 

Espero que esto ayude a cualquiera que intente hacer lo mismo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X