sshコマンドで接続先のサーバでコマンドを実行する
sshコマンド、Linuxユーザなら多くの方がご存知でしょう。
今回は一歩進んだsshコマンドの使い方をご紹介していきます。
使いこなせると作業効率があがること間違いなしです!応用編まであるので、順番にトライしてみてください!
sshコマンド はリモートのサーバへ接続するコマンドで、以下のように使用します。
1 |
ssh ユーザ名@ホスト名(IPアドレス) |
ユーザ名はリモートサーバ上のユーザ名、ホスト名(IPアドレス)はリモートサーバのホスト名(IPアドレス)です。
1 |
ssh kamotora@hoge.hoge |
といった具体です。kamotoraユーザでhoge.hogeというホスト名に接続しています。
ここまでは普通の使い方。
sshコマンドですが、実は接続先のサーバ上でコマンドを実行するということもできるのです。やりかたは簡単。以下のとおり実行します。
1 |
ssh ユーザ名@ホスト名(IPアドレス) コマンド |
例えば以下のように実行した場合、hoge.hogeサーバにkamotoraユーザでログインし、ログイン先で「ls -l」コマンドを実行することになります。
1 |
ssh kamotora@hoge.hoge ls -l |
基本編プラスアルファ
以下のように実行すると、接続先のサーバ上にファイルが作成されます。
1 |
ssh ユーザ名@ホスト名(IPアドレス) 'コマンド > ファイル名' |
ポイントはシングルクォーテーション(’)でコマンドを囲むこと。シングルクォーテーションの代わりにダブルクォーテーション(”)でも囲っても構いません。
次に、シングルクォーテーション(’)、ダブルクォーテーション(”)を取り除いた場合はどうなるか。
1 |
ssh ユーザ名@ホスト名(IPアドレス) コマンド > ファイル名 |
この場合、接続元、つまりsshコマンドを実行したサーバ上にファイルが作成されます。
応用編
ここから応用編です。先ほどはファイルへ書き出しましたが、逆に以下のようにファイルから読み込みとどうなるのか。
1 |
ssh ユーザ名@ホスト名(IPアドレス) コマンド < ファイル名 |
はい、lsコマンド等では何も起こりません。ただ、このコマンドが「sh」「bash」等の場合は結果が異なります。ファイルがスクリプトの場合、接続先でスクリプトを実行してくれます。
1 |
ssh ユーザ名@ホスト名(IPアドレス) 'sh' < スクリプト |
このスクリプトは接続元に配置されている必要があります。
仮に以下のように実行した場合、hoge.shは接続元に存在するhoge.shファイルです。
1 |
ssh ユーザ名@ホスト名(IPアドレス) 'sh' < hoge.sh |
以下のように実行した場合は、hoge.shは接続先に存在するhoge.shファイルです。
1 |
ssh ユーザ名@ホスト名(IPアドレス) 'sh < hoge.sh' |
こういった場合に便利
複数のサーバを管理していて、各サーバからまとめて情報を取得したい場合などに非常に楽ができます。
各サーバへファイルの配布をする必要がありません。
例えば、「hoge.sh」に各サーバで実行したいコマンドを書いておけば、以下のように実行すると、接続元のサーバに「output_ホスト1.txt」「output_ホスト2.txt」「output_ホスト3.txt」の3ファイルが作成されるわけです。
1 2 3 |
ssh ユーザ名@ホスト1 'sh' < hoge.sh > output_ホスト1.txt ssh ユーザ名@ホスト2 'sh' < hoge.sh > output_ホスト2.txt ssh ユーザ名@ホスト3 'sh' < hoge.sh > output_ホスト3.txt |
情報収集が簡単になることがわかるかと思います。