我正在使用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会话中的所有命令完成后运行一系列命令。有可能吗?
谢谢,