【问题标题】:ssh connection handle pexpect in pythonpython中的ssh连接句柄pexpect
【发布时间】:2014-02-13 14:45:01
【问题描述】:

我试图自动化一个系统,其中我们有一个 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 提示符。

【问题讨论】:

  • 在下一个提示之前的输出中是否有#
  • 我也检查过.. 但这里不是这样。

标签: python linux ssh cisco pexpect


【解决方案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”的结果。我想我将不得不启动一个外壳,但不确定。你有什么进展吗?

有人可以帮忙吗???

【讨论】:

  • # 如果评论出现在字符串中,则不会开始评论。
最近更新 更多