帕拉米科期待超时

时间:2017-11-07 18:29:18

标签: python paramiko

考虑从Perl迁移到运行脚本的Python,以自动执行远程服务器和设备上的某些任务。我们需要能够使用Expect检查某些结果并获取数据。看看Paramiko-Expect,我喜欢它,但每次都超时。

import paramiko
from paramikoe import SSHClientInteraction

HOSTNAME = "HOST IP"
PASSWORD = "PWORD"
USERNAME = "UNAME"
PROMPT = "(node name)#"

command = "show command"

print PROMPT

file = open("testlog.txt","w")

def main():

    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    client.connect(HOSTNAME, port=22, username=USERNAME, password=PASSWORD)

    interact = SSHClientInteraction(client, timeout=10, display=True)

    interact.send(command)
    interact.expect(PROMPT)
    file.write(interact.current_output_clean)
    client.close()

    return



main()
file.close()

这是我得到的追溯:

Traceback (most recent call last):    
 File "python_test.py", line 40, in <module> 
  main()    
 File "python_test.py", line 28, in main 
  interact.expect(PROMPT)
 File "/usr/local/lib/python2.7/site-packages/paramikoe.py", line 122, in expect 
  buffer = self.channel.recv(self.buffer_size)    
 File "/usr/local/lib/python2.7/site-packages/paramiko/channel.py", line 598, in recv 
  raise socket.timeout() socket.timeout

我已经尝试过多个版本的PROMPT,直接将我正在尝试的节点文本放到完整的正则表达式中。什么都行不通。当它到达client.expect时总是超时。 Paramiko-expect文档没有帮助,我看到这个问题的唯一其他地方是不同的,它没有帮助。 任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

提示您想要的东西,如...提示。 Here是paramiko互动示例。请注意第21行和第37行 -

PROMPT = 'vagrant@paramiko-expect-dev:~\$\s+'

interact.expect(PROMPT)

所以,当我将部分代码更新为:

interact = SSHClientInteraction(client, timeout=10, display=True)
interact.expect(PROMPT)

interact.send("ls")
interact.expect(".*Maildir.*")
file.write(interact.current_output_clean)
client.close()

我有testlog.txt填写了远程主机的主目录列表。

作为旁注 - 切换到python 3.如果你正在开始,最好使用众所周知的工具很快就会过时。您也可以使用ipython或jupyter - 代码将更具交互性,更快地进行测试。也许netmiko会对你感兴趣吗?