我正在使用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))
如何保持频道开放?
答案 0 :(得分:5)
channel
文档非常清楚这一点。您需要为每个exec_command
打开一个新频道。
exec_command(* args,** kwds)
在服务器上执行命令。如果服务器允许,则通道将直接连接到正在执行的命令的stdin,stdout和stderr。
当命令完成执行时,通道将关闭,无法重复使用。如果要执行另一个命令,则必须打开一个新通道。
SSHClient
对象有一个exec_command
方法可以为您执行此操作。