执行一个命令后,paramiko ssh通道关闭 - Python

时间:2015-03-05 16:52:40

标签: python ssh paramiko

我正在使用Python的{​​{1}}来执行删除服务器中的命令。代码很简单。

这是我对Paramiko类的定义:

SSHConn

所以我正在运行以下代码:

class SSHConn:

  def __init__(self, hostname, user, pwd, filename=None):
    self.client = paramiko.SSHClient()
    self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    self.client.connect(hostname, username=user, password=pwd,
                          key_filename=filename)
    self.transport = self.client.get_transport()
    self.channel = self.transport.open_session()

然而,当我执行以下代码时,我正在获取:

local_ssh = ssh.SSHConn(host, user, passwd)

cmds = ('foo', 'bar')
for cmd in cmds:
   local_ssh.channel.exec_command(cmd)
   self.log.info(local_ssh.channel.recv(1024))

如何保持频道开放?

1 个答案:

答案 0 :(得分:5)

channel文档非常清楚这一点。您需要为每个exec_command打开一个新频道。

  

exec_command(* args,** kwds)

     

在服务器上执行命令。如果服务器允许,则通道将直接连接到正在执行的命令的stdin,stdout和stderr。

     

当命令完成执行时,通道将关闭,无法重复使用。如果要执行另一个命令,则必须打开一个新通道。

SSHClient对象有一个exec_command方法可以为您执行此操作。