【问题标题】:Execute (sub)commands in secondary shell/command on SSH server in Paramiko [duplicate]在 Paramiko 的 SSH 服务器上的辅助 shell/命令中执行(子)命令 [重复]
【发布时间】: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


【解决方案1】:

将要在子shell中执行的命令写入stdin

stdin.write('command\n')
stdin.flush()

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 2018-12-04
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2013-11-22
    • 2016-03-23
    相关资源
    最近更新 更多