def run_cmd_on_server(self, ip, user, passwd, timeout, need_root=False, *args):
run('rm /home/user/.ssh/known_hosts')
run('touch /home/user/.ssh/known_hosts')
try:
ssh = pxssh.pxssh()
if need_root is True:
ssh.login(ip, user, passwd, login_timeout)
self.sendline_with_expect(ssh, 'su - root', 'password', root_password) ----su to root
else:
ssh.login(ip, user, passwd, login_timeout=60)
for value in args:
self.sendline_with_expect(ssh, value) ----execute commands
ssh.prompt(timeout)
result = ssh.before
return result
except pxssh.ExceptionPxssh, e:
print str(e)
return "False"
finally:
ssh.close()
self.sendline_with_expect(ssh, value)
是包含ssh.sendline()
和ssh.expect()
的包装方法。
不允许直接以root用户身份登录,因此我必须以普通用户身份登录,然后以su身份登录到root用户。
ssh.prompt(timeout)
中的超时在以普通用户身份登录时可以正常运行,但是当su到root用户时,它将变为恒定的等待时间。我不知道为什么以及如何解决它,有人可以帮我一个忙吗?