sshでリモートサーバーにログイン後、コマンドやスクリプトを実行してその結果を取得したい場合があります。 その場合、毎回リモートにログインして実行するのは手間なので、ローカルでコマンドやスクリプトを指定して、それらをリモートで実行後、その結果を取得します。

複数サーバーで定期的に同じコマンドを実行して結果を取得する場合は、以下にサンプルがあります。

実行方法

sshコマンドでは、リモートで実行するコマンドをオプションで指定できます。

ssh [接続先] [リモートで実行するコマンド]
この実行結果は現在のサーバーの標準出力に出力されますので、結果をリダイレクトでファイルに保存したりすることができます。 また、毎回のパスワードが面倒な場合は、リモートでSSH鍵認証を設定して鍵認証でログインできるようにします。 鍵認証の秘密鍵を指定する場合は、以下のようになります。
ssh -i [秘密鍵] [接続先] [リモートで実行するコマンド]

例  実行例

$ ssh user@example.com hostname
example.com
上記ではhostnameがリモートで実行するコマンドになります。 リモートのexample.comで、hostnameコマンドを実行した結果が2行目の"example.com"になります。

複数のコマンドを実したり、コマンドのオプションでスペースがある場合は、シングルクォートかダブルクォートで囲みます。 各コマンドの区切りには";"を指定します。

$ ssh user@example.com 'hostname;hostname -i;pwd'
example.com
192.168.1.1
/home/user
1行目の"exapmle.com"はhostnameコマンドの結果です。 2行目の"192.168.1.1"はhostnameコマンドにオプション'-i'を指定した結果です。 最後の""/home/user"はpwdコマンドの結果になります。

実行結果をファイルに保存

リモートで実行された結果は標準出力に出力されるので、リダイレクトでファイルに保存することもできます。

ssh user@example.com 'hostname;hostname -i;pwd' > result.txt

ローカルのスクリプトファイルをリモートで実行

sshのコマンドに、ローカルにあるスクリプトファイルを指定することが可能です。 これを使えば、ローカルからリモートでスクリプトを実行して結果をローカルに取得することができます。 さらに、リダイレクトで実行結果をローカルファイルに保存できます。

ssh [接続先] < [リモートで実行するスクリプトファイル] > [リモートでの実行結果を保存するファイル]

以下のようなスクリプト(test.sh)をリモートサーバー(user@example.com)で実行する場合、

#!/bin/bash

hostname
hostname -i
結果を画面で確認したい場合は以下のようになります。
ssh user@example.com < test.sh

結果をファイル(result.txt)に保存したい場合は、以下のようになります。

ssh user@example.com < test.sh > result.txt

何度も実行する場合は、上記コマンドをスクリプトファイルにして実行するのが楽です。

例 スクリプトファイル
#!/bin/bash

HOST=example.com
USER=user

ssh ${USER}@${HOST} < test.sh > result.txt