sshでリモートサーバーにログイン後、コマンドやスクリプトを実行して
その結果を取得したい場合がある。
その場合、毎回リモートにログインして実行するのは手間なので、ローカルで
コマンドやスクリプトを指定して、それらをリモートで実行後、その結果を取得する。
複数サーバーで定期的に同じコマンドを実行して結果を取得する場合は、以下に例。
■実行方法
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
—————————————————