2016-04-12 8 views
1

私はいくつかのリモートホストにsshを実行し、いくつかのチェックを実行するためにparamikoを使用するスクリプトを作成しています。いくつかのホストは他人のフェイルオーバーとしてセットアップされており、接続しようとするまではどのホストが使用中であるのか判断できません。これらの「非アクティブ」ホストの1つに接続すると、ホストは別の「アクティブな」IPに接続してからn秒後に接続を終了する必要があることを通知します。これはSSH接続/セッションの標準出力に書き込まれたようです(つまり、SSHバナーではありません)。Paramikoは接続オブジェクト(exec_commandではなく)からstdoutを取得します

私はparamikoをかなり使っていますが、接続からこの出力を得る方法については迷っています。exec_commandは明らかにstdoutとstderrを与えてくれますが、他の着信要求/メッセージは受け入れません。 n秒後に閉じます。

タイムアウトが次のホストに移動するまで待つ必要はなく、それがチェックを接続して実行できない理由であることを確認したいと思います。意図されました。

paramikoの有無にかかわらず、どのようにこの出力をキャプチャすることができるかについてのご意見をいただければ幸いです。

答えて

0

私はデータを取得する方法を考え出しましたが、正直言って少しストレートでした。

接続が開くと、サーバーは2つのメッセージを吐き出します.1つは特定のディレクトリにchdirできないというメッセージです数ミリ秒後に、別のIPに接続する必要があるというメッセージが表示されます。接続直後にコマンドを送信した場合(どのコマンドでも関係ありません)、exec_commandはこの2番目のメッセージを応答として解釈します。今のところ私はこの文字列を調べて既知のメッセージを確認し、実行の流れを変えることができるので、私の問題を解決することができます。

しかし、私が記述した内容が正確であれば、待ち時間があまり長くなく、サーバーの応答を受け取る前に「テスト」コマンドが送信されない状況では、この機能が動作しない可能性があります。

paramikoとの接続を開いた直後にstdoutストリームを取得する方法は現在ありません(私は間違いかもしれません)。誰かが道を知っているなら、私に知らせてください。

関連する問題