【发布时间】:2018-11-15 10:05:55
【问题描述】:
我的目标是能够通过 SSH 连接到设备,执行 CLI 命令,这会将我带到另一个 Shell,我可以在其中输入命令。目前,我能够成功地通过 SSH 连接到设备,但无法弄清楚如何使用 CLI 访问该辅助 shell。下面是我的代码
import datetime, logging, os, paramiko, re, scp, sys, time, socket, logging
SSH = paramiko.SSHClient()
SSH.set_missing_host_key_policy(paramiko.AutoAddPolicy())
SSH.connect(server, username=usr, password=password, port=22, timeout=2)
print('successful ssh')
stdin, stdout, stderr = SSH.exec_command('cli console',bufsize=2)
# inBuf = stdout.readlines()
# for line in inBuf:
# print(line.strip('\n'))
SSH.close()
我最初的假设是,在执行 cli 进入 shell 控制台后,我可以简单地执行我想要的任何命令,但事实并非如此。任何帮助将不胜感激
【问题讨论】:
-
这真的取决于设备,或者更确切地说,它的 SSH 服务器实现。它可能根本不支持
exec_command();ssh your-device 'cli console'工作,还是需要运行ssh your-device然后运行 cli console? -
如果是后者,那么这可能是
pexpect的工作。请参阅paramiko-expect了解一些可能使这更容易的胶水。 -
您能详细说明一下吗?我阅读了一些关于 paramiko-expect 的文档,但不确定它会有多大用处。
-
关键区别在于使用的是
exec_command()还是invoke_shell()。 通常,当有人在与最小的嵌入式 SSH 服务器交互时遇到问题时,问题是该服务器根本不支持(背后的协议级功能)exec_command(),而只支持 @987654332 @,因此您需要通过单个会话发送多个命令——因此需要expect样式的模式匹配机制,而不是能够为每个远程命令获取一个通道。
标签: python python-3.x ssh paramiko