当前位置: 首页 > 面试题库 >

在Python Paramiko中的SSH服务器上的辅助Shell /命令中执行(子)命令

洪祺
2023-03-14
问题内容

我在ShoreTel语音开关上遇到问题,并且尝试使用Paramiko跳入并运行一些命令。我认为问题可能是,ShoreTel
CLI给出的提示与标准Linux不同$。它看起来像这样:

server1$:stcli
Mitel>gotoshell
CLI>  (This is where I need to enter 'hapi_debug=1')

Python是否仍在期待它$,还是我还缺少其他东西?

我认为这可能是一件时事,所以我将它们放在time.sleep(1)命令之间。似乎仍然没有采取。

import paramiko
import time

keyfile = "****"
User = "***"
ip = "****"

command1 = "stcli"
command2 = "gotoshell"
command4 = "hapi_debug=1"

ssh = paramiko.SSHClient()
print('paramikoing...')
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname = ip, username = User, key_filename = keyfile)
print('giving er a go...')
ssh.invoke_shell()
stdin, stdout, stderr = ssh.exec_command(command1)
time.sleep(1)
stdin, stdout, stderr = ssh.exec_command(command2)
time.sleep(1)
stdin, stdout, stderr = ssh.exec_command(command4)
time.sleep(1)
print(stdout.read())

ssh.close()

print("complete")

从成功执行此代码中,我期望的hapi_debug级别是1。这意味着当我通过SSH进入东西时,我会看到那些HAPI调试正在填充。当我这样做时,我看不到那些调试。


问题答案:

我假设gotoshellhapi_debug=1不是顶级命令,而是的子命令stcli。换句话说,stcli是一种外壳。

在这种情况下,您需要将要在子shell中执行的命令写到其stdin

stdin, stdout, stderr = ssh.exec_command('stcli')
stdin.write('gotoshell\n')
stdin.write('hapi_debug=1\n')
stdin.flush()

如果您stdout.read随后调用,它将等到命令stcli完成。它永远不会做。如果您想继续读取输出,则需要发送一个终止子shell的命令(通常是exit\n)。

stdin.write('exit\n')
stdin.flush()
print(stdout.read())


 类似资料:
  • 问题内容: 我试图通过这样的本地服务器上的ssh命令在远程linux服务器上执行命令: ssh myremoteserver’类型ttisql’ 其中ttisql是我的远程计算机路径上的可执行文件。 运行此命令的结果是: bash:第0行:类型:ttisql:未找到 当我只是先连接并执行以下操作: ssh myremoteserver 然后输入命令: [myuser @ myremoteserve

  • 我试图在unix中使用JSCHSSH类(com.jcraft.jsch)执行一些工具。我的工具有一个选择菜单。我需要转到工具所在的文件夹,执行它并选择请求的选项。在每个命令之后,(cd,execute,…)我希望检查输出并检查状态代码(0/1)。我有下面的代码按预期执行它,但在这段代码中,我找不到一种方法来检查每个命令后的输出。 我无法找到一种方法,但我怎么能分开的命令,并打印他们一个接一个(在同

  • 问题内容: 我正在寻找在Go中执行shell命令,并在程序中以字符串形式获取结果输出。我看到了Rosetta Code 版本: 但这并不能以我可以通过编程方式访问的方式捕获实际的标准或错误-那些仍会打印到常规的stdout / stderr。我看到使用Pipe作为out或err可以在其他地方提供帮助,但是没有如何执行此操作的示例。有任何想法吗? 问题答案: 该答案不代表Go标准库的当前状态。请查看

  • 问题内容: 我正在编写一个脚本来自动化Python中的某些命令行命令。目前,我正在打电话: 但是我需要在远程计算机上运行一些命令。手动地,我将使用ssh登录,然后运行命令。我将如何在Python中自动执行此操作?我需要使用(已知)密码登录到远程计算机,所以我不能只使用,我想知道是否应该使用一个模块? 问题答案:

  • 你可以不离开gdb,直接执行shell命令,比如: (gdb) shell ls 或 (gdb) !ls 这里,"!"和命令之间不需要有空格(即,有也成)。 特别是当你在构建环境(build目录)下调试程序的时候,可以直接运行make: (gdb) make CFLAGS="-g -O0" 详情参见 gdb手册

  • 问题内容: 我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情… 重要的一点是必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被打印到控制台了。 我很难理解代码在哪里突破了…该模型的非常简单的原型可以工作… 有人可以帮助我了解为什么有效,但是无效吗?FWIW,我需要使用,因为缓冲区限制为200KB。