2016-09-16 7 views
0

これは、ホストがSSH対応であるかどうかをテストするための私の現在のコードです。 SSHサービスの有無にかかわらず、ホストが稼動しているときにうまく動作します。しかし、ホストがクラッシュしたときにハングアップしているように見えます。これは、私がそれに依存する必要があるユニークなユースケースです。 OSやその他の依存関係のため、Pythonのバージョンは現在2.6に保つ必要があります。だから私はこの機能を働かせる方法と1-2秒のタイムアウトが必要です。タイムアウトでSSHをテストする方法が必要

import commands 

def test_ssh(host): 
    output = commands.getstatusoutput("ssh " + host + " hostname") 
    if output[0] == 0: 
     return True 
    else: 
     print(host + " not accessible via SSH!") 
     return False 
+0

'sshの-oのconnecttimeout = 5 ...'の仕事をしていますか? – drew010

+0

私はそれを試してみましょう。フラグは正常に動作し、私はBatchModeを下記の提案ごとに追加しました。しかし、私はサーバが要求に応じてクラッシュしたときの状態を再現することができないので、それが再び起こるまで確実に言うことはできません。 – Eroji

答えて

0

あなたはそれが実際には接続タイムアウトであるかどうかを判断するために、またはそれが接続できるかどうか必要がありますが、サーバーは接続を受け入れているし、何も送信しません。あなたがすべてでサーバーからの応答を取得する場合は、手動で、telnetの22をテストし、確認するためにTelnetを使用した場合、それが接続している場合

は、あなたがこのように表示されます。

 
$ telnet localhost 22 
Connected to localhost. 
Escape character is '^]'. 
SSH-2.0-OpenSSH_7.2 

を、それが接続している場合と、応答が得られない場合は、Pythonでソケットを使用してテストを試してみる必要があります。

あなたはここで情報を見つけることができます。 https://docs.python.org/3/library/socket.html

+0

私はソケットで動作する関数を得ました。私はオンデマンドでサーバーの状態を再現することができません。私は、これが存在する可能性のある状態でこれが動作することが保証されているかどうかを判断することができません。 – Eroji

0

を使用すると、(認証を含む)SSH接続が正しく確立できることを確認したい場合は、最良の方法は、おそらく小さなタイムアウト(とバッチモードで接続することです-o BatchMode=yes -o ConnectTimeout=2)。

+0

提案をありがとうございます。私はそれを試してみましょう。フラグは期待どおりに機能しますが、次回にサーバーがクラッシュした場合にのみ動作するかどうかはわかります。 – Eroji

関連する問題