当我使用pxssh进入远程服务器运行unix命令(如uptime )时,我得到了下面的错误。
Traceback (most recent call last):文件"./ssh_pxssh.py",第33行,在login_remote (主机名,用户名,密码)文件"./ssh_pxssh.py",第12行,在login_remote中,如果不是s.login(主机名,用户名,密码):文件登录时,第278行
**raise ExceptionPxssh ('could not synchronize with original prompt')pexpect.pxssh.ExceptionPxssh:无法与原始提示同步**
第33行是我在main中调用此函数的位置。
我使用的函数如下:
def login_remote(hostname, username, password):
s = pxssh.pxssh()
s.force_password = True
if not s.login(hostname, username, password, auto_prompt_reset=False):
print("ssh to host :"+ host + " failed")
print(str(s))
else:
print("SSH to remote host " + hostname + " successfull")
s.sendline('uptime')
s.prompt()
print(s.before)
s.logout()并不是每次运行脚本时都会出现错误。相反,它是间歇性的。在我运行脚本的10次中有7次是这样的。
发布于 2014-04-15 19:07:31
当pxssh尝试在一个非常慢的连接上登录时,我也遇到了同样的问题。pexpect库显然被远程motd提示符欺骗了。
这个远程motd提示符包含一个未命名的-svr提示符,该提示符本身包含一个#字符。显然,pexpect将其视为提示符。从那时起,lib不再与ssh会话保持一致。
下面的解决方法对我有效:只需在/var/run/motd.dynamic (debian)或/var/run/motd (ubuntu)中删除# char即可。
另一种解决方案是要求ssh在登录时不提示motd。但这对我不起作用:我添加了以下内容: PrintMotd no in /etc/ssh/sshd_config =>不起作用
另一种解决方法:在主目录中创建一个文件:~目录下的.hushlogin
https://stackoverflow.com/questions/20054030
复制相似问题