Search code examples
pythonsshparamiko

Executing command using Paramiko SSH returns hex-encoded output


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'\x84\xab\xef \xaf\xae\xab\xe3\xe7\xa5\xad\xa8\xef \xe1\xa2\xa5\xa4\xa5\xad\xa8\xa9 \xae\xa1 \xae\xaf\xe0\xa5\xa4\xa5\xab\xa5\xad\xad\xae\xa9 \xaa\xae\xac\xa0\xad\xa4\xa5 \xad\xa0\xa1\xa5\xe0\xa8\xe2\xa5 HELP <\xa8\xac\xef \xaa\xae\xac\xa0\xad\xa4\xeb>\r\nASSOC          \x82\xeb\xa2\xae\xa4 \xab\xa8\xa1\xae \xa8\xa7\xac\xa5\xad\xa5\xad\xa8\xa5 \xe1\xae\xaf\xae\xe1\xe2\xa0\xa2\xab\xa5\xad\xa8\xa9 \xaf\xae \xe0\xa0\xe1\xe8\xa8\xe0\xa5\xad\xa8\xef\xac \xa8\xac\xa5\xad \xe4\xa0\xa9\xab\xae\xa2.\r\nATTRIB         \x8e\xe2\xae\xa1\xe0\xa0\xa6\xa5\xad\xa8\xa5 \xa8 \xa8\xa7\xac\xa5\xad\xa5\xad\xa8\xa5 \xa0\xe2\xe0\xa8\xa1\xe3\xe2\xae\xa2 \xe4\xa0\xa9\xab\xae\xa2.\r\nBREAK        \x82\xaa\xab\xee\xe7\xa5\xad\xa8\xa5 \xa8 \xa2\xeb\xaa\xab\xee\xe7\xa5\xad\xa8\xa5 \xe0\xa5\xa6\xa8\xac\xa0 \xae\xa1\xe0\xa0\xa1\xae\xe2\xaa\xa8 \xaa\xae\xac\xa1\xa8\xad\xa0\xe6\xa8\xa8 \xaa\xab\xa0\xa2\xa8\xe8 CTRL+C.\r\nBCDEDIT        \x87\xa0\xa4\xa0\xa5\xe2 \xe1\xa2\xae\xa9\xe1\xe2\xa2\xa0 \xa2 \xa1\xa0\xa7\xa5 \xa4\xa0\xad\xad\xeb\xe5 \xa7\xa0\xa3\xe0\xe3\xa7\xaa\xa8 \xa4\xab\xef \xe3\xaf\xe0\xa0\xa2\xab\xa5\xad\xa8\xef \xad\xa0\xe7\xa0\xab\xec\xad\xae\xa9\r\n               \xa7\xa0\xa3\xe0\xe3\xa7\xaa\xae\xa9.\r\nCACLS          \x8e\xe2\xae\xa1\xe0\xa0\xa6\xa5\xad\xa8\xa5 \xa8 \xe0\xa5\xa4\xa0\xaa\xe2\xa8\xe0\xae\xa2\xa0\xad\xa8\xa5 \xe1\xaf\xa8\xe1\xaa\xae\xa2 \xe3\xaf\xe0\xa0\xa2\xab\xa5\xad\xa8\xef \xa4\xae\xe1\xe2\xe3\xaf\xae\xac (ACL)\r\n               \xaa \xe4\xa0\xa9\xab\xa0\xac.\r\nCALL

Where is my mistake?


Solution

  • That seems to be CP866 encoding of Cyrillic.

    b = b'\x84\xab\xef \xaf\xae\xab\xe3\xe7\xa5\xad\xa8\xef ...';
    t = b.decode("CP866")
    print(t)
    

    Yields:

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