【问题标题】:Paramiko Expect (Huawei networks)Paramiko Expect(华为网络)
【发布时间】:2018-07-26 14:04:23
【问题描述】:

我在 Huawei 设备上遇到 paramiko 的问题,这在 cisco 上完美运行,只是为了画图...

我正在创建一个简单的 SSH 脚本,我希望在给出的每个命令的末尾都有提示,这在 cisco 上也能完美运行,提示以 # 结尾,所以例如switch(config)#,但是 huawei 设备上的提示被括在括号中,如[switch]

huawei 用户模式下,提示符是 <switch>,paramiko expect 可以正常工作,但是在带有括号 [] 的配置模式下,它只是挂起并超时,这可能是因为方括号? python 认为这可能是一个列表?

import paramiko
from paramiko_expect import SSHClientInteraction
from os import system

system('cls')


IP = '192.168.5.2'
UN = 'username'
PW = 'password'
baseprompt = '<RICH_USG>'
sysprompt = str('[RICH_USG]')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=IP, username=UN, password=PW)
session = SSHClientInteraction(ssh, timeout=5, display=True)
print('interactive SSH session established!')
session.expect(baseprompt)
print('DEBUG ------- Baseprompt found')

session.send('screen-length 0 temporary')
session.expect(baseprompt)


session.send('sys')
session.expect(sysprompt)  # This is where the script fails and times out


output = session.current_output_clean
ssh.close()

print(output)

任何建议将不胜感激

【问题讨论】:

    标签: windows python-3.x paramiko pexpect


    【解决方案1】:

    字符串'[RICH_USG]' 的问题在于expect() 将使用它作为正则表达式来匹配输入,而[...] 是一种特殊语法,它只匹配给定字符中的一个,例如只匹配@987654324 @ 或只是 I,等等。

    您需要通过使用\ 转义来删除[ 的任何特殊含义。你不需要转义],但你可以这样做是为了对称。所以你的字符串应该是'\[RICH_USG]'。为避免意外后果,通常通过在 rr'\[RICH_USG]' 前添加前缀来使其成为原始字符串。请注意,expect() 默认情况下会将其扩展为 r'.*\n\[RICH_USG]$',因此您的提示符必须位于行首,并且包含所有行。

    【讨论】:

    • 嗯,非常感谢您的评论,这就是问题所在,添加了转义字符,现在工作正常,再次感谢
    【解决方案2】:

    使用的 encoding=latin-1 问题已解决,但是 我无法使用 paramiko 验证预期值。所以我使用了 ROBOT 框架的 SSH 库。 这对我来说很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多