0

ファイアウォール サーバーにログオンし、いくつかのログをエクスポートし、ログをローカル ホストに scp してから、リモート サーバー (ファイアウォール サーバー) から削除するプロセスを自動化しようとしています。

また、ssh および転送中にいずれかのマシンのパスワードを入力せずに両方のマシンが通信できるように、ホスト ベースの認証を有効にしました。

うまくいくと思ってシステムコールを使い始めたのですが、思ったようにうまくいかないようです。私がしたことは、このようなものでした

system(ssh user@firewallserver)
system(cd /directory)
system(fwm logexport)
system(scp log user@localhost:/home)
system(rm log)

過去にこれを試みた人は、これが機能しないことを知っているでしょうが、私は解決策やタスクを達成するための別の方法を知りません.

ありがとう!

4

3 に答える 3

2

systemコマンドは新しいプロセスを開くため、ssh セッションは 2 回目の呼び出しで終了します。本当に使用したい場合は、1 つのコマンドで実行してみてくださいsystem

ssh server <some commands on server side>

scp <path on server> <local path>

編集:試してください

ssh server 'cd /directory && touch test123'

コマンドラインで。test123これにより、リモート サーバーの directory にファイルが作成されます/directory。次に、このコマンドをsystem(...)呼び出しに入れます。このようにして、リモート ホストでコマンドを実行できます。新しい呼び出しごとに、systemもう一度行う必要がありますssh server <commands>...

C プログラムで必要ない場合は、これらのコマンドを直接 bash スクリプトに入れることができます。

#!/bin/bash
ssh server 'cd /directory && touch test123'
scp server:/directory/test123 /home/me/log123
于 2013-05-14T21:23:02.313 に答える
0

Bashは間違いなく行く方法です!これらのコマンドをスクリプトに直接貼り付けるだけで、認証を適切に設定していれば機能するはずです。

スクリプトは次のようになります。

#!/bin/bash
ssh user@firewallserver
cd /directory
fwm logexport
scp log user@localhost:/home #Possible mistake
rm log

今、あなたのコードを調べたところ、誤解がある可能性があります。log元のマシンに戻ることになっていると思いsshますfirewallserver

その場合はlocalhostscp呼び出しで使用できません。これはfirewallserver. scp log user@<your local IP>ログインしたマシンにログを戻す必要があります。

もしそうなら、私が上に投稿したスクリプトはうまくいくはずです。ただし、私が正しければ、scp行を交換するだけでうまくいくはずです。

于 2013-05-14T22:32:50.920 に答える
0

これは、これを効果的に行う方法です。bash スクリプトでは、次のようにします。

#!/bin/bash
ssh user@host 'bash -l' < ~/dowork.sh

「dowork.sh」スクリプトは、リモート マシンで実行したいものです。これらのスクリプトを最大 2 つに分割し、コマンドを実行するときに dowork.sh を ssh にリダイレクトする必要があります。

シェルが正しいマシンに入っていることを確認するには、「dowork.sh」でこれを行います

#!/bin/bash
echo $PATH

これにより、リモートマシンからのパス変数が得られます。

于 2013-06-21T14:51:53.300 に答える