加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python paramiko模块使用多个命令

发布时间:2020-12-20 11:31:06 所属栏目:Python 来源:网络整理
导读:我有一个创建连接的类.我可以在通道关闭之前连接并执行1命令.在另一个系统上,我可以执行多个命令,并且通道不会关闭.显然它是我尝试连接的系统的配置问题. class connect: newconnection = '' def __init__(self,username,password): ssh = paramiko.SSHClien
我有一个创建连接的类.我可以在通道关闭之前连接并执行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,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))>>>

就像我在另一个系统上说的那样,我能够继续运行命令并且连接不会关闭.有没有办法让我保持开放?或者更好的方式,我可以看到它关闭的原因?

编辑:所以看起来每个SSHClient.exec_command只能运行1个命令…所以我决定使用get_transport().open_session()然后运行一个命令.第一个总是有效的.第二个总是失败,脚本只是挂起

解决方法

在exec_command执行后只有paramiko,关闭通道并且ssh返回auth提示符.

似乎只有paramiko,尝试织物或其他工具是不可能的.

** fabric did not work out too.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读