在 Python Paramiko 的 SSH 服务器上的辅助 shell/command 中执行 (sub) 命令

Execute (sub)commands in secondary shell/command on SSH server in Python Paramiko

提问人:Garrett M. Williamson 提问时间:10/18/2019 最后编辑:Martin PrikrylGarrett M. Williamson 更新时间:10/20/2019 访问量:1892

问:

我的 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")

我对成功执行此代码的期望是级别为 1。这意味着当我通过 SSH 连接到该事物时,我会看到这些 HAPI 调试正在填充。当我这样做时,我没有看到这些调试。hapi_debug

Python SSH 帕拉米科 ·肖特尔

评论


答:

5赞 Martin Prikryl 10/18/2019 #1

我假设 和 不是顶级命令,而是 .换句话说,它有点像一个外壳。gotoshellhapi_debug=1stclistcli

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

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

如果之后调用,它将等到命令完成。它从不做什么。如果要继续读取输出,则需要发送终止子shell的命令(通常为)。stdout.readstcliexit\n

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