コマンドを引数としてSSHに渡して、サーバー上でそのコマンドを実行し、終了することができます。
ssh user@host "command to run"
これは、複数のコマンドのリストでも機能します。
ssh user@host "command1; command2; command3"
または、代わりに:
ssh user@host "
command1
command2
command3
"
私の前に他のユーザーが指摘したようにsu
、サーバー上で実行すると、スクリプト内の後続のコマンドをルートとして実行する代わりに、新しいシェルが起動します。必要なのは、sudo
またはのいずれかを使用su -c
し、-t
スイッチでSSHにTTY割り当てを強制することです(ルートパスワードを入力する必要がある場合に必要)。
ssh -t user@host 'su - -c "command"'
ssh -t user@host 'sudo command'
まとめると、やりたいことを達成する1つの方法は次のようになります。
#!/bin/bash
ssh -t user@172.1.1.101 "
sudo some_command
sudo service server_instance stop
sudo some_other_command
"
以来 sudo
、通常再度rootのパスワードを尋ねる前に数分間許可レベルを覚えて、ちょうど先頭に追加sudo
rootとして実行する必要があるすべてのコマンドにすることは可能性の高いサーバー上でrootとしてコマンドを実行する最も簡単な方法です。NOPASSWD
ユーザーにルールを追加/etc/sudoers
すると、プロセスがさらにスムーズになります。
これが役立つことを願っています:-)