Paramiko exec_command завершается с ошибкой, объект NoneType не повторяется - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в Парамико. Я пытаюсь создать простой сценарий, который позволяет любому использовать свои учетные данные Linux для запуска команды. Я решил проверить с помощью простой команды ls, но я получаю ошибки.

import paramiko
username = *<USERNAME>*
hostname = *<HOSTNAME>*
port = 22
trans = paramiko.Transport((hostname,port))
trans.connect(username=username, password=password)
channel = trans.open_channel("session")
print(channel.send_ready())
print(channel.get_transport())
stdin,stdout,stderr = channel.exec_command("ls -lah")
trans.close()

Я получаю следующую ошибку:

TypeError                                 Traceback (most recent call last)
<ipython-input-28-ce837beea6fe> in <module>()
      6 trans.connect(username=username, password=password)
      7 channel = trans.open_channel("session")
----> 8 stdin,stdout,stderr = channel.exec_command("ls -lah")

TypeError: 'NoneType' object is not iterable

Есть идеи о том, что я могу делать неправильно?

1 Ответ

0 голосов
/ 29 июня 2018
  1. В SSH нет канала session (если на вашем сервере не реализовано несколько нестандартных каналов). Есть каналы sftp, shell и exec.

    Вы хотите использовать exec канал.

  2. И вам не нужно явно открывать канал exec в Paramiko. Просто используйте SSHClient.exec_command метод .

    SSHClient.exec_command (в отличие от Channel.exec_command) возвращает 3 касания.

См., Например, команда запуска Python Paramiko :

s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
command = 'ls -lah'
(stdin, stdout, stderr) = s.exec_command(command)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...