接続を作成するクラスがあります。チャネルが閉じられる前に、接続して 1 つのコマンドを実行できます。別のシステムでは、複数のコマンドを実行できますが、チャネルが閉じません。明らかに、接続しようとしているシステムの構成の問題です。
class connect:
newconnection = ''
def __init__(self,username,password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect('somehost', username=username,password=password,port=2222,timeout=5)
except:
print "Count not connect"
sys.exit()
self.newconnection = ssh
def con(self):
return self.newconnection
次に、「ls」コマンドを使用して出力を印刷します
sshconnection = connect('someuser','somepassword').con()
stdin, stdout, stderr = sshconnection.exec_command("ls -lsa")
print stdout.readlines()
print stdout
stdin, stdout, stderr = sshconnection.exec_command("ls -lsa")
print stdout.readlines()
print stdout
sshconnection.close()
sys.exit()
最初の exec_command が実行された後、予想されるディレクトリ リストの出力が出力されます。最初の exec_command の後に stdout を出力すると、チャネルが閉じているように見えます
<paramiko.ChannelFile from <paramiko.Channel 1 (closed) -> <paramiko.Transport at 0x2400f10L (cipher aes128-ctr, 128 bits) (active; 0 open channel(s))>>>
別のシステムで言ったように、コマンドを実行し続けることができ、接続が閉じません。これを開いたままにしておく方法はありますか?または、閉じる理由を確認できるより良い方法はありますか?
edit : SSHClient.exec_command ごとに 1 つのコマンドしか実行できないように見えるので、get_transport().open_session() を実行してからコマンドを実行することにしました。最初のものは常に機能します。2 つ目は常に失敗し、スクリプトがハングするだけです