Python Paramiko通道在执行一个命令后断开连接
我使用Paramiko模块访问我的服务器,但我面临的问题是在执行一个命令后通道断开。我希望通道是开放的,直到我执行完更多的命令。运行两个通道并不能解决我的问题,因为在第一个通道中,我更改了目录,并希望在同一个更改的目录中运行下一个命令Python Paramiko通道在执行一个命令后断开连接,python,ssh,paramiko,channel,Python,Ssh,Paramiko,Channel,我使用Paramiko模块访问我的服务器,但我面临的问题是在执行一个命令后通道断开。我希望通道是开放的,直到我执行完更多的命令。运行两个通道并不能解决我的问题,因为在第一个通道中,我更改了目录,并希望在同一个更改的目录中运行下一个命令 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('xx.xx.xx.xx', us
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('xx.xx.xx.xx', username='abc', password='abc')
chan = ssh.get_transport().open_session()
chan.settimeout(10800)
chan1 = ssh.get_transport().open_session()
chan1.settimeout(10800)
chan.exec_command('uptime')
chan1.exec_command('who')
data = chan.recv(4096)
print data
data1 = chan1.recv(4096)
print data1
Paramiko“exec_command”API始终在执行后打开新通道,并在命令执行完成后终止通道
我认为您仍然可以在第二个通道命令中更改一个通道命令,因为它最后在同一个SSH会话中。您可能需要在两个命令执行之间添加一些延迟。但是,如果你不。。别担心。。paramiko中有一个解决方案,可以运行尽可能多的命令
下面是paramiko的交互式外壳函数
def interactive_shell():
transport = paramiko.Transport(("1.1.1.1",22))
transport.connect(username="abcd", password="abcd")
#chan = paramiko.transport.open_session()
chan = transport.open_session()
chan.setblocking(0)
chan.invoke_shell()
chan.send("uptime")
chan.send("who")
time.sleep(1) #optional
while not chan.exit_status_ready() :
if chan.recv_ready() :
output = chan.recv(8192)
if len(output) > 0 :
print output
if chan.recv_stderr_ready() :
mystderr = chan.recv_stderr(8192)
if len(mystderr) > 0 :
print mystderr
transport.close()
如果您正试图自动化远程服务器命令,您可能会更乐意使用它,它在
paramiko