Python使用多线程连接到2个不同的SSH会话

时间:2015-02-01 06:44:40

标签: python

我正在使用pexpect在2台服务器上执行ssh操作。背后的想法是,我将ssh到第一个ssh服务器,然后在另一个单独的线程ssh到第二个ssh服务器。我将在第二台SSH服务器上运行一些命令,并在第一台SSH服务器上捕获输出。

代码工作正常,除了第一个SSH服务器会话在接收来自第二个ssh服务器的所有命令之前终止的事实。

我不想使用interact(),因为我正在执行自动化。

class THREAD_CLASS(threading.Thread):
    def __init__(self, object):
        threading.Thread.__init__(self)
        self.obj = object

    def run(self):
        self.obj.run()

class someClass(object):

    def __init__(self):
        pass

    def run(self):
        self.child = pexpect.spawn('ssh '+ MACHINE_IP, logfile=self.logfile)
        i = self.child.expect(['(yes/no)', 'Password:'])
        if i == 0:
            self.child.sendline('yes')
            self.child.expect('password:')
            self.child.sendline('passwd')
        elif i == 1:
            self.child.sendline('passwd')
        self.child.expect('shell password')
        self.child.sendline('cmd1')
        self.child.expect('#')
        self.child.sendline('cmd2')
        self.child.expect('#')
        self.child.sendline('cmd3')
        self.child.expect('>')
        #self.child.sendline('cmd4')
        #self.child.expect('>')
        #self.child.sendline('cmd5')
        #self.child.expect('>')
        self.child.sendline('cmd6')
        self.child.expect('>')
        self.child.sendline('cmd7')
        self.child.expect('>')
        self.child.sendcontrol('m')
        self.child.sendline('cmd8')
        self.child.expect('>')
        self.child.expect(pexpect.EOF, timeout=60)
        #self.child.sendline('exit')
        #self.child.expect('#')
        #self.child.sendcontrol('m')
        #self.child.expect('#')
        #self.child.sendline('exit')
        #self.child.interact()

    def stop(self):
        return 1


class secondClass():
    # some code here
    pass


# Threaded module
firstclass = BASE_THREAD(someClass)
secondclass = BASE_THREAD(secondClass)

如果你看到它,我在两个不同的线程中运行ssh类。

程序运行正常,当我在secondClass中运行命令时,我能够将数据记录到日志文件中。但问题是,我没有完全得到日志。在某些时候,第一个线程终止。

我不知道如何解决这个问题。

此外,我想在第二个SSH会话中的所有命令完成后运行一系列命令。有可能吗?

谢谢,

0 个答案:

没有答案