web-dev-qa-db-ja.com

接続後のホストでのスクリプトの実行に関する問題

Linuxスクリプトは初めてです。助けてください。私は以下をたくさん検索しましたが、適切な答えを見つけることができませんでした:

後でcronjobとしてスケジュールするスクリプトを作成しようとしています。これにより、バックエンドで実行を継続し、結果をtest.txtなどのファイルに保存します。

スクリプトの要点は以下のとおりです。

sshを介してホストに接続し、そのホストでいくつかのコマンドを実行して結果をファイルに保存します。スクリプトはホストに正常に接続していますが、ホストでコマンドを自動的に実行していません。スクリプトは以下の通りです:

    #!/usr/bin/expect -f

spawn ssh aspen

expect "password: "

send "PASSWORD\r"

expect "$ "

send "/bin/sh /home/target/Script.sh >>test.txt"

expect "$ "

send "exit\r"

しかし、このスクリプトを実行すると、test.txtに完全な出力が保存されません。2つ目は、この出力ファイルをホストではなく自分のシステムに保存することです。どんな助けでもかなりあります。

2
prashant

ここでいくつかのことを達成しようとします。

  1. ユーザーの操作なしでホストに接続する
  2. スクリプトを実行して、その出力を保存します

1に:

ssh-keygenを使用してssh鍵ペアを生成し、公開鍵をホストマシンに保存することをお勧めします。パスワードを使用せずに生成すると、sshは接続時にパスワードを要求しません。使用する

client$ ssh -i <keyfile>

生成されたキーを使用してホストに接続します。認識されるホストに公開鍵を追加する方法については、ssh(1)およびsshd(8)セクションのAUTHORIZED_KEYSファイル形式も参照してください。これは主に次のとおりです。

Host$ cat <keyfile>.pub >> ~/.ssh/authorized_keys

(これはホストで実行する必要があります!)

備考:秘密鍵はパスワードに相当します! cronジョブのみが使用できるように安全に保管してください。 sshd(8)セクションのAUTHORIZED_KEYS FILE FORMATを見てください。これは、生成されたキーペアの使用を制限して、スクリプトのみを実行できるようにする方法を示しています。

2へ:

sshは、I/Oリダイレクトを含む引数としてShellコマンドを使用して実行できます。実行するだけです。 /home/target/Script.sh 2>&1そして出力を保存します。完全なコマンドは次のようになります。

client$ ssh -i <keyfile> user@Host '/home/target/Script.sh 2>&1' >>test.txt

test.txtは自分のマシンにあり、スクリプトはホスト上で実行されます。

備考:スクリプトは、出力を標準出力に転送します。ホストで特別な処理は必要ありません(標準エラーへの出力もキャプチャするためのリダイレクト「2>&1」を除く)。

1
spacefrogg