pxssh错误'无法与原始提示同步'

时间:2013-11-18 17:32:06

标签: python-3.x

使用pxssh进入远程服务器运行unix命令(如正常运行时间)时,我遇到了以下错误

Traceback (most recent call last):

文件“./ssh_pxssh.py”,第33行,in     login_remote(主机名,用户名,密码)   在login_remote中输入第12行的文件“./ssh_pxssh.py”     如果不是s.login(主机名,用户名,密码):   文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/pexpect/pxssh.py”,第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()

每次运行脚本时都不会出现错误。相反,它是间歇性的。我运行脚本的次数达到了7次。

2 个答案:

答案 0 :(得分:1)

我已经通过在登录函数中添加 sync_multiplier 参数解决了该问题。

formDetails

请注意, sync_multiplier 是执行成功同步的通信超时参数。它会尝试读取提示至少 sync_multiplier 秒。 此方法最坏的情况是 sync_multiplier * 3秒。

我个人设置了sync_multiplier = 2,但这取决于我所使用的系统上的通信速度。

答案 1 :(得分:0)

当pxssh尝试以非常慢的连接登录时,我遇到了同样的问题。 pexpect lib显然被远程motd提示所欺骗。

这个远程motd提示符包含一个uname -svr提示符,其中包含一个#字符。 显然,pexpect看起来像是一个提示。从那时起,lib与ssh会话不再一致。

以下解决方法对我有用: 只需删除/var/run/motd.dynamic(debian)中的#char,或者删除/ var / run / motd(ubuntu)。

另一个解决方案是让ssh在登录时不提示motd。但这不适合我: 我添加了以下内容:     PrintMotd没有 在/ etc / ssh / sshd_config中 =>不工作

另一种解决方法: 在主目录中创建一个文件: 〜目录中的.hushlogin