2

paramiko (pysftp にラップ) で python を使用していますが、ssh 中に認証できない場合、長時間ハングするという問題があるようです。接続のタイムアウトを設定する方法を理解できず、多くのマシンを循環しているため、ping 可能であるが ssh 可能ではない (cmdline ssh 経由でも到達できない) 単一のマシンがすべてをハングさせています。 . これを使用して:

ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 <host>

paramiko での認証が終了して例外が発生するのを長時間待たずに、少なくとも 1 秒後にエラーを発生させることができます。ただし、これらの ssh_config オプションを paramiko に渡す方法 (または接続にタイムアウトを適用する方法) がわかりません。SSHConfig モジュールを使用してみましたが、構成ファイルを読み取りますが、データをどこにも適用していないようで、ホストエイリアスに使用されているようです。

何時間も情報/ヘルプを探し回っています。

4

1 に答える 1

1

SSHClient.connect()指定されたソケット タイムアウトを使用して初期接続を確立し、SFTPClientそのトランスポートを使用して を作成します。

接続成功

>>> import paramiko
>>> client = paramiko.SSHClient()
>>> client.load_system_host_keys()
>>> client.connect(hostname='localhost', port=22, username='user', password='****', timeout=5.0)
>>> sftp = paramiko.SFTPClient.from_transport(client.get_transport())
>>> dirlist = sftp.listdir('.')

タイムアウトした接続

>>> import paramiko
>>> client = paramiko.SSHClient()
>>> client.load_system_host_keys()
>>> client.connect(hostname='slowhost', username='user', password='****', timeout=1.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 296, in connect
    sock.connect(addr)
  File "/usr/lib64/python2.7/socket.py", line 222, in meth
    return getattr(self._sock,name)(*args)
socket.timeout: timed out
于 2012-05-28T03:59:05.087 に答える