Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Paramiko通道在执行一个命令后断开连接_Python_Ssh_Paramiko_Channel - Fatal编程技术网

Python 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

我使用Paramiko模块访问我的服务器,但我面临的问题是在执行一个命令后通道断开。我希望通道是开放的,直到我执行完更多的命令。运行两个通道并不能解决我的问题,因为在第一个通道中,我更改了目录,并希望在同一个更改的目录中运行下一个命令

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