ssh连接在python中处理pexpect

时间:2014-02-13 14:45:02

标签: python linux ssh cisco pexpect

我试图自动化一个系统,我们有一个linux盒子但是自定义..转到shell我们必须传递一些输入。如下所示:

tanuj$ ssh admin@10.10.10.10
Used by Tanuj

Password: 

command line interface

app > en
app # config t
app (config) # 

我在python中使用pexpect编写了一个脚本。我能够登录并执行命令

pexpect.sendline("ls -lrt")
pexpect.expect("#")

但是当我使用pexpect.before()时......什么都没有...当命令输出很长时我也可以看到pexpect.before也得到了命令。

任何想法如何解决这个..或者是否有任何其他python模块,我可以用来自动化ssh会话,就像我在这里。

我也尝试过使用paramiko,但它没有用,因为我们在执行正常的shell提示之前执行了一些命令。

1 个答案:

答案 0 :(得分:1)

我也面临类似的问题。我正要问这个问题。您在

中使用了#符号
pexpect.expect('#')

此#符号会记录其后写的所有内容。此外我想你应该创建一个子进程来生成一个进程,就像(我不知道我的情况是否正确):

child=pexpect.spawn('ssh admin@10.10.10.10')
child.expect('prompt_expected_by_you')     # put in the prompt you expect after sending SSH
child.sendline('your_password')
child.expect('Prompt_expected_by_you')
child.sendline('ls -ltr')
child.expect('Prompt_expected_by_you')
print child.before,            # , will keep continue your newline print
print child.after
child.sendline('exit')
child.expect('Prompt_expected_by_you')
child.sendline('exit')
child.expect('Prompt_expected_by_you')   # may not be required
child.close                              # close the child session

我在FTP中成功使用了这些命令,但无法在SSH中打印“LS -LTR”的结果。我想我必须发起一个shell,但不确定。你身边有什么进展吗?

有人可以帮忙???