Você pode passar um comando como argumento para o SSH para executar esse comando no servidor e sair:
ssh user@host "command to run"
Isso também funciona para uma lista de vários comandos:
ssh user@host "command1; command2; command3"
Ou alternativamente:
ssh user@host "
command1
command2
command3
"
Como outros usuários indicaram antes de mim, a execução su
no servidor iniciará um novo shell em vez de executar comandos subseqüentes no script como root. O que você precisa fazer é usar um sudo
ou su -c
, e forçar a alocação de TTY ao SSH com a -t
opção (necessário se você precisar digitar a senha root):
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
Para resumir tudo, uma maneira de realizar o que você deseja fazer seria:
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
Como sudo
normalmente lembra o nível de autorização por alguns minutos antes de solicitar a senha root novamente, basta anexar sudo
todos os comandos que você precisa executar como root e provavelmente a maneira mais fácil de executar comandos como root no servidor. A adição de uma NOPASSWD
regra para o usuário /etc/sudoers
tornaria o processo ainda mais suave.
Eu espero que isso ajude :-)