2011-02-10 11 views
0

マシンAでbashシェルを実行していますが、マシンB上のシェルシェルを介してsshを実行し、コマンド結果をマシンCに要求します。SSHコマンド(AからBへのC)

1)bashシェル "A" 機械 "A" に:マシンA上のTTYに示す結果...

ここでは、回線コードの数千の​​要約であるNOK

... 
ssh -p port [email protected] "scriptB.pl" 
... 

2)perl scriptB.pl "machine" B ":OK

... 
# my $user = qx|$ssh_cmd| if ($ssh_connection_ok); 
my $user = qx#$ssh_cmd# if ($ssh_connection_ok); 
... 

3)マシン "C" 上のbashコマンド$ ssh_cmd:OK、スタンドアロン、STEP2とSTEP3など

cat /my_dir/my_file | grep this_user | head -n1 | cut -d: -f1 | tr 

ランは、期待される結果を示したが、マシンAからscriptB.plを実行しています予想されるデータは返されません。私は現時点でNet :: SSH2を使用していませんが、qxを使用します。クライアントのsshセットアップの問題かもしれません。

Thx in adv。

+0

はい、$?マシンB上でスクリプトBを実行すると0を返しますが、マシンAから実行すると65280を返します。これをどのように解釈するのですか?私もマシンBでローカルにscriptBを実行しましたが、そこから期待値を取得します。 machineCでcmdを実行するだけでなく、私はまた、perlシバンの後に$ | = 1を追加しようとしましたが、diffはありません。 – hornetbzz

答えて

1

障害が発生した場合は、外部プログラムの終了ステータスを確認してください。 $?で終了ステータスを取得するには、POSIXモジュールのperlvar documentation -use $? >> 8またはWEXITSTATUSを参照してください。あなたのケースでは

は、65280は255の終了ステータスに対応し、エラーが発生した場合、リモートコマンドの終了ステータスでまたは255で終了しssh manual

SSHによります。

私は、失敗したsshから何らかの診断が表示されないことに驚いています。標準エラーを/dev/nullにリダイレクトしていますか、それとも他の出力が氾濫していますか?

暗号化されていないsshキーまたはrhosts認証を使用していますか?接続を認証エージェントに転送していますか(~/.ssh/configForwardAgent)?デバッグのために、中間の人を省略して、ホストAから直接ホストCするコマンドを発行できますか?サーバーA上の

コンテキスト::同じ問題に直面する人々のために

+0

リダイレクションoh/dev/nullへの出力:no – hornetbzz

+0

sshはdsaキーで有効になり、1台のマシンから次のマシンにキーチェーンでチェーンされます。 ForwardAgent:いいえ。 – hornetbzz

+0

ホストAから直接ホストCにbashコマンドを発行しています(ssh経由でも可):はい、動作します。 (私は圧縮のために "-C"のようなシェルのsshオプションをいくつか削除することを確認する必要があります) – hornetbzz

関連する問題