【问题标题】:Pexpect hanging on ssh connectionPexpect 挂在 ssh 连接上
【发布时间】:2018-01-17 17:46:37
【问题描述】:

我编写了一个简单的 python 脚本来连接(通过 ssh)到 Palo Alto 防火墙,以通过 cli 收集一些数据。但是,一旦它连接到盒子,它就不会执行命令,它只会挂起并出现以下错误:

Traceback(最近一次调用最后一次):

文件“myscript.py”,第 97 行,在

connectExpect()  

文件“myscript.py”,第 58 行,在 connectExpect 中

child.expect('username@device-name> ')

文件“/usr/lib/python2.7/site-packages/pexpect.py”,第 1311 行,在预期中

return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)

文件“/usr/lib/python2.7/site-packages/pexpect.py”,第 1325 行,在 expect_list 中

return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)

文件“/usr/lib/python2.7/site-packages/pexpect.py”,第 1409 行,在 expect_loop 中

raise TIMEOUT (str(e) + '\n' + str(self))

pexpect.TIMEOUT: read_nonblocking() 超时。

版本:2.3($Revision:399 $)

命令:/usr/bin/ssh

args: ['/usr/bin/ssh', 'user@{ip address}']

搜索者:searcher_re:

0: re.compile("username@device-name> ")

缓冲区(最后 100 个字符):2018 年 2:14 来自 {server name}

欢迎用户名。

用户名@设备名称>

之前(最后 100 个字符):2018 年 2:14 来自 {server name}

欢迎用户名。

用户名@设备名称>

之后:

匹配:无

match_index:无

退出状态:无

flag_eof: 假

pid:24490

child_fd: 3

关闭:错误

超时:30

分隔符:

日志文件:无

日志文件读取:无

logfile_send:无

最大读取:2000

忽略大小写:错误

搜索窗口大小:无

延迟发送前:0.05

延迟关闭:0.1

延迟后终止:0.1

这是脚本:

child = pexpect.spawn('ssh username@ipaddress')
child.expect('Password: ')
child.sendline('userpassword')
child.expect('username@device-name> ')  # User is now logged in 

以下命令未执行,脚本挂起

上面提供的错误

child.sendline('command1')
child.expect('username@device-name> ')
child.sendline('command2')

此时用户仍处于登录状态。

【问题讨论】:

    标签: ssh pexpect


    【解决方案1】:

    您可以尝试在您的期望中不使用尾随空格

    child.expect('username@device-name>')
    

    而不是

    child.expect('username@device-name> ')  
    

    【讨论】: