web-dev-qa-db-ja.com

スクリプトを使用してsshサーバーでコマンドをリモートで実行する

Ssh-serverでコマンドを実行したいのですが、このコマンドはローカルマシンのスクリプトによって決定されます。それ、どうやったら出来るの?

明確にするための例:
ここで、引数を取るスクリプト(foo.sh)を書きたいと思います。 ./foo.sh 0を実行すると、何らかの理由でサーバーマシンにシャットダウン信号が送信されますが、./foo.sh 1を実行すると、再起動信号が送信されます。

私は手動でssh経由でログインする方法を知っていて、パスワードをスキップするようにssh-keysをすでに設定しましたが、スクリプトで手順を自動化する方法がわかりません。

6
Malabarba

Oliがコメントしたように、コマンドを送信するようにSSHに指示できます。コマンドライン引数が1の場合、ssh user@server "shutdown -h now"を送信するようにスクリプトを変更できます。シャットダウンするには、他のマシンでスーパーユーザーになる必要があることに注意してください。

EDIT:コメントに示されているように、パスワードを使用せずにマシンをシャットダウンできるようにuserをsudoersファイルに入れて、ルートを使用する代わりに。

6
Nick Pascucci

次のようなコマンド(または;で区切られたコマンドのリスト)をSSH接続に渡すことができます。

ssh user@server-address "./foo 1"

0または1を出力するローカルスクリプトがある場合は、さらに単純化できます。

ssh user@server-address "./foo `/path/to/your/script`"

バックティックのコードは他の何かの前に実行され、その出力は動的に行に入れられます。

8
Oli