さて、この質問に対する答えは単純に「parallel-ssh の使用をやめて、netmiko/paramiko を使用して独自のコードを記述してください。また、すでに Python 3 にアップグレードしてください」である可能性があります。
しかし、ここに私の問題があります。私は一度に 80 台ものデバイスをヒットしようとするために、parallel-sshを使用しています。これらのデバイスは信頼性が低いことで有名で、1 行または 2 行の出力を行った後にフリーズすることがあります。次に、parallel-ssh コードが何時間もハングアップし、スクリプトを実行したままにします。週末の後でスクリプトを実行している VM にジャンプしたところ、52 時間スタックしているジョブが表示されました。
私の最初のコードの関連部分、ハングするもの:
from pssh.pssh2_client import ParallelSSHClient
def remote_ssh(ip_list, ssh_user, ssh_pass, cmd):
client = ParallelSSHClient(ip_list, user=ssh_user, password=ssh_pass, timeout=180, retry_delay=60, pool_size=100, allow_agent=False)
result = client.run_command(cmd, stop_on_errors=False)
return result
次に試したのはchannel_timoutオプションです。コマンド出力を取得するのに 4 分以上かかる場合は、デバイスがフリーズしていることがわかるので、スクリプトの後半で次のサイクルに進む必要があります。
from pssh.pssh_client import ParallelSSHClient
def remote_ssh(ip_list, ssh_user, ssh_pass, cmd):
client = ParallelSSHClient(ip_list, user=ssh_user, password=ssh_pass, channel_timeout=180, retry_delay=60, pool_size=100, allow_agent=False)
result = client.run_command(cmd, stop_on_errors=False)
return result
このバージョンは、実際には何にも接続しません。何かアドバイス?一定時間後にsshセッションを強制終了しようとするchannel_timeout以外のものを見つけることができませんでした。