1. SSHコマンド

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

SSHコマンド

OpenSSHのクライアントコマンドでは、リモートで実行するコマンドをオプションで指定できます。

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