Puede pasar un comando como argumento a SSH para ejecutar ese comando en el servidor y luego salir:
ssh user@host "command to run"
Esto también funciona para una lista de múltiples comandos:
ssh user@host "command1; command2; command3"
O alternativamente:
ssh user@host "
command1
command2
command3
"
Como otros usuarios han señalado antes que yo, ejecutar su
en el servidor lanzará un nuevo shell en lugar de ejecutar comandos posteriores en el script como root. Lo que debe hacer es usar uno sudo
o su -c
, y forzar la asignación de TTY a SSH con el -t
interruptor (requerido si necesita ingresar la contraseña de root):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
En resumen, una forma de lograr lo que quieres hacer sería:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
Como sudo
normalmente recuerda su nivel de autorización durante unos minutos antes de solicitar nuevamente la contraseña de root, simplemente anteponer sudo
todos los comandos que necesita ejecutar como root es probablemente la forma más fácil de ejecutar comandos como root en el servidor. Agregar una NOPASSWD
regla para su usuario /etc/sudoers
hará que el proceso sea aún más sencillo.
Espero que esto ayude :-)