私はいくつかのコードをデバッグしています。その結果、いくつかの外部sftpサーバーに常にログイン/ログアウトします。コードで非paramiko例外が発生した場合に、paramikoが外部サーバー上のssh/sftpセッションを自動的に閉じるかどうかを誰かが知っていますか?ドキュメントでそれを見つけることができません。接続は各反復のかなり早い段階で行う必要があるため、20の接続が開いたままになることは望ましくありません。
いいえ、paramikoはssh/sftpセッションを自動的に閉じません。例外がparamikoコードによって生成されたかどうかは関係ありません。 paramikoコードには、例外をキャッチして自動的に閉じるものは何もないので、自分で行う必要があります。
次のようにtry/finalブロックでラップすることで、確実に閉じることができます。
client = None
try:
client = SSHClient()
client.load_system_Host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('ls -l')
finally:
if client:
client.close()
SSHClient()はコンテキストマネージャーとして使用できるため、次のことができます。
with SSHClient() as ssh:
ssh.connect(...)
ssh.exec_command(...)
手動で閉じないでください。