【问题标题】:Python Script Pexpect SSHPython 脚本 Pexpect SSH
【发布时间】:2016-08-07 22:31:03
【问题描述】:

我正在尝试编写一个 Python 脚本(带有循环)以在 SSH 中连接,如果一切正常(密码和路由)它就可以工作,但是当它不工作时停止(密码错误或没有主机路由)。这里是脚本的重要部分,我如何控制一切是否正常?

connexion = pexpect.spawn("ssh -o StrictHostKeyChecking=no "+user+"@" + ip )
index=connexion.expect(':')
connexion.sendline(password + "\r")
connexion.expect('>')
connexion.sendline('show clock \r')
connexion.expect('>')
connexion.sendline('exit')
connexion.close()

我得到错误:

Traceback (most recent call last):
File "script.py", line 21, in <module>
connexion.expect('>')
 File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1418, in    expect
timeout, searchwindowsize)
File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1433, in expect_list
timeout, searchwindowsize)
File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1521, in expect_loop
raise EOF(str(err) + '\n' + str(self))
pexpect.EOF: End Of File (EOF). Exception style platform.
<pexpect.spawn object at 0x7fcfeecee750>
version: 3.1
command: /usr/bin/ssh
args: ['/usr/bin/ssh', '-o', 'StrictHostKeyChecking=no',   'username@10.9.128.5']
 searcher: <pexpect.searcher_re object at 0x7fcfeecee850>
 buffer (last 100 chars): ''
 before (last 100 chars): ' connect to host 10.9.128.5 port 22: No route to  host\r\r\npassword\r\n\r\n'

谢谢

【问题讨论】:

  • 您遇到什么错误?因为如果密码不正确,您可能会将代码放在 try 块中并捕获错误并再次提示用户输入密码。您能否发布一些失败的代码示例以及完整的错误回溯?
  • Traceback(最近一次调用最后一次):文件“script.py”,第 21 行,在 connexion.expect('>') 文件“/usr/lib/python2.7/dist -packages/pexpect/__init__.py”,第 1418 行,预期超时,搜索窗口大小)文件“/usr/lib/python2.7/dist-packages/pexpect/__init__.py”,第 1433 行,预期列表超时,搜索窗口大小)文件“/usr/lib/python2.7/dist-packages/pexpect/__init__.py”,第 1521 行,在 expect_loop 中引发 EOF(str(err) + '\n' + str(self)) pexpect.EOF: End文件(EOF)。异常风格的平台。
  • 您能否将该错误添加到您的原始帖子并格式化它以便于阅读?
  • 好的,我编辑帖子。
  • 看起来它可能在无法到达主机时发生了 eof 异常。您可能需要一个 try 块来捕获异常发生并处理连接已终止或不可用的事实。

标签: python shell ssh pexpect


【解决方案1】:

问题是主机10.9.128.5 目前无法访问。 ssh 已返回此消息:

connect to host 10.9.128.5 port 22: No route to  host

并非如此,这是预期的。

【讨论】:

    【解决方案2】:

    您遇到了一个需要正确处理的异常。下面是一些代码,您可以将其用作传递异常并记录它的示例。

    def ignore_exception_out(conn, text, timeout=10):
            try:
                conn.expect(text, timeout)
            except Exception as e:
                logging.log("Exception reached {0}".format(e))
                pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      相关资源
      最近更新 更多