первый (который проще в использовании) и если он не работает, то используйте

отаю над преобразованием инструмента из Ruby в Python, и версия Ruby используетNet :: SSH подключаться к удаленному хосту, отправлять команды и получать ответы / данные. Я использую paramiko в аналоге Python, но я не совсем понимаю, какКаналы в парамико. Из того, что я прочитал до сих пор, мне кажется, что канал (который используетПарамико Транспорт) используется для сохранения постоянного подключения к SSH, а не для выполнения команды и последующего прекращения подключения.

Требуется ли канал? Какой стек необходим для открытия постоянного SSH-соединения с хостом, чтобы последовательно отправлять и получать несколько команд и получать ответы, а затем по окончании вручную закрыть соединение?

Вот две основные строки, из-за которых у меня возникают проблемы с переводом на Python, потому что я не уверен, что Ruby-канал "Channel" напрямую отображается на paramiko-Channel:

@ssh_connection = Net::SSH.start(@linux_server_name, 
                        @server_user_name, 
                        :password => @password, 
                        :paranoid => false)

а позже в коде

@channel = @ssh_connection.open_channel do |new_channel|

Редактировать: Чтобы более подробно объяснить мой вопрос, я смог подключиться к удаленному хосту, используя paramiko, выполнить несколько последовательных команд и получить их результаты без использования транспорта или канала, так что, опять же, каковы причины использования Channel в paramiko?

def connect(self):
    ssh_connection = paramiko.SSHClient()
    ssh_connection.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_connection.connect(self.linux_server_name)
    stdin, stdout, stderr = ssh_connection.exec_command("ls -l")
    print(stdout.readlines())
    stdin, stdout, stderr = ssh_connection.exec_command("ls -l /tmp")
    print(stdout.readlines())
    ssh_connection.close()

Ответы на вопрос(1)

Ваш ответ на вопрос