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, он становится постоянным временем ожидания. Не знаю почему и как это решить, может кто-нибудь сделать мне одолжение?