一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • 「sshした接続先で実行したいコマンドを今接続しているサーバーで実行する方法」について

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

—————————————————

 

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア