Executing command using Paramiko SSH returns hex-encoded output

Question:

I try to write script to connect by SSH to Windows but answer is strange.

Here is my script:

import paramiko
import codecs
host = '*******'
user = '*****'
psw = '****'
port = 22
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=host, port=port, username=user, password=psw)

stdin, stdout, stderr = ssh.exec_command('help')
stdin.close()
print(stdout.read() + stderr.read())

result = stdout.read().splitlines()
ssh.close()

The answer looks like this:

b'x84xabxef xafxaexabxe3xe7xa5xadxa8xef xe1xa2xa5xa4xa5xadxa8xa9 xaexa1 xaexafxe0xa5xa4xa5xabxa5xadxadxaexa9 xaaxaexacxa0xadxa4xa5 xadxa0xa1xa5xe0xa8xe2xa5 HELP <xa8xacxef xaaxaexacxa0xadxa4xeb>rnASSOC          x82xebxa2xaexa4 xabxa8xa1xae xa8xa7xacxa5xadxa5xadxa8xa5 xe1xaexafxaexe1xe2xa0xa2xabxa5xadxa8xa9 xafxae xe0xa0xe1xe8xa8xe0xa5xadxa8xefxac xa8xacxa5xad xe4xa0xa9xabxaexa2.rnATTRIB         x8exe2xaexa1xe0xa0xa6xa5xadxa8xa5 xa8 xa8xa7xacxa5xadxa5xadxa8xa5 xa0xe2xe0xa8xa1xe3xe2xaexa2 xe4xa0xa9xabxaexa2.rnBREAK        x82xaaxabxeexe7xa5xadxa8xa5 xa8 xa2xebxaaxabxeexe7xa5xadxa8xa5 xe0xa5xa6xa8xacxa0 xaexa1xe0xa0xa1xaexe2xaaxa8 xaaxaexacxa1xa8xadxa0xe6xa8xa8 xaaxabxa0xa2xa8xe8 CTRL+C.rnBCDEDIT        x87xa0xa4xa0xa5xe2 xe1xa2xaexa9xe1xe2xa2xa0 xa2 xa1xa0xa7xa5 xa4xa0xadxadxebxe5 xa7xa0xa3xe0xe3xa7xaaxa8 xa4xabxef xe3xafxe0xa0xa2xabxa5xadxa8xef xadxa0xe7xa0xabxecxadxaexa9rn               xa7xa0xa3xe0xe3xa7xaaxaexa9.rnCACLS          x8exe2xaexa1xe0xa0xa6xa5xadxa8xa5 xa8 xe0xa5xa4xa0xaaxe2xa8xe0xaexa2xa0xadxa8xa5 xe1xafxa8xe1xaaxaexa2 xe3xafxe0xa0xa2xabxa5xadxa8xef xa4xaexe1xe2xe3xafxaexac (ACL)rn               xaa xe4xa0xa9xabxa0xac.rnCALL

Where is my mistake?

Asked By: Dmitriy

||

Answers:

That seems to be CP866 encoding of Cyrillic.

b = b'x84xabxef xafxaexabxe3xe7xa5xadxa8xef ...';
t = b.decode("CP866")
print(t)

Yields:

Для получения сведений об определенной команде наберите HELP <имя команды>
ASSOC Вывод либо изменение сопоставлений по расширениям имен файлов.
ATTRIB Отображение и изменение атрибутов файлов.
BREAK Включение и выключение режима обработки комбинации клавиш CTRL+C.
BCDEDIT Задает свойства в базе данных загрузки для управления начальной
 загрузкой.
CACLS Отображение и редактирование списков управления доступом (ACL)
к файлам.
...
Answered By: Martin Prikryl