Paramiko SSH подключение к хосту Windows. Пустой стандартный вывод команды «VBoxManage.exe guestcontrol run» - PullRequest
0 голосов
/ 10 октября 2019

Я пишу сценарий Python, выполняющий сценарий bash внутри виртуальной машины VirtualBox с использованием библиотеки Paramiko Python. Фрагмент кода ниже:

stdin, stdout, stderr = i[2].exec_command("\"\Program Files\Oracle\VirtualBox\VBoxManage.exe\" guestcontrol \"virtnet_proxy\" run --exe \"/home/username/show_ip.sh\" --username username --password password" )
exit_status = stdout.channel.recv_exit_status()          

if exit_status == 0:
    proxy_ip=stdout.readlines()
    print ("got proxy ip from host  ", i[0], proxy_ip, stderr.readlines())

Подключается к хосту Windows и должен печатать IP-адрес интерфейса виртуальной машины. Если вы запустите эту команду в cmd, она будет работать нормально, но с помощью ssh-клиента paramiko stdout будет пустым. Если вы запускаете аналогичный код, за исключением того, что вы подключаетесь к хосту linux virtualbox (и запускаете команду linux), stdout.readlines() работает нормально и содержит вывод скрипта bash. Вывод Stderr:

VBoxManage.exe: warning: Error getting stdout handle: VERR_NOT_IMPLEMENTED\r\n', 'VBoxManage.exe: warning: Error getting stderr handle: VERR_NOT_IMPLEMENTED\r\n

Сценарий Bash:

ips=$(hostname --all-ip-addresses)
read -ra arr <<< "$ips"
echo"${arr[0]}"

Как я уже сказал, stdout пуст, только если вы подключаетесь к хосту Windows и запускаете команду vboxmanage на гостевой машине.

Спасибо заранее, Войтек

1 Ответ

0 голосов
/ 17 октября 2019

РЕДАКТИРОВАТЬ: я изменил сервер SSH на хосте Windows с OpenSSH на FreeSSHd и код работал!

...