Использование paramiko, когда сервер Unix использует VShell - PullRequest
0 голосов
/ 31 января 2019

Вариант использования

На сервере unix при входе в систему вручную открывается собственная командная оболочка для запуска команды.

Vshell prompt

Я пытаюсь автоматизировать это с помощью paramiko, однако почему-то я не могу выполнить команду в командной оболочке с помощью paramiko

Что я сделал?

Я создал простой сценарий, который может устанавливать соединение, но он не выполняет команду на Vshell, поскольку выход всегда выводится пустым.

import paramiko
import sys

ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=sys.argv[1],port=sys.argv[2],username=sys.argv[3],password=sys.argv[4])
command="show hwid"
stdin,stdout,stderr=ssh_client.exec_command(command)
out=stdout.read()
print out
err=stderr.read()
print err
ssh_client.close()

Тот же сценарий работает отлично, когда он используется на сервере, где vshell не используется

Любая помощь или предложение по этому поводу?

1 Ответ

0 голосов
/ 31 января 2019
stdin,stdout,stderr=ssh_client.exec_command(command)

Что касается этой строки кода, я подозреваю, что сервер SSH не настроен должным образом, чтобы разрешать выполнение команд таким способом (это эквивалент ssh myserver show hwid, а не вводить его в терминал после входа в систему).

Возможно, вы захотите имитировать поведение ввода команды после входа на сервер, и для этого, я думаю, это подходит:

shell = ssh_client.invoke_shell()
stdin, stdout, stderr = shell.exec_command(command)
...