Usar canales con Paramiko

Estoy trabajando para convertir una herramienta de Ruby a Python, y la versión de Ruby usaNet :: SSH para conectarse a un host remoto y enviar comandos y recuperar respuestas / datos. He estado usando paramiko en la contraparte de Python, pero estoy confundido sobre el propósito deCanales en paramiko. Por lo que he leído hasta ahora, me parece que un canal (que usa untransporte paramiko) se utiliza para mantener una conexión persistente a SSH en lugar de ejecutar un comando y luego finalizar la conexión.

¿Se requiere un canal? ¿Cuál es la pila requerida para abrir una conexión SSH persistente a un host para enviar y recibir múltiples comandos secuencialmente y obtener las respuestas, luego, cuando termine, cierre manualmente la conexión?

Estas son las dos líneas principales que tengo problemas para traducir a Python, porque no estoy seguro de si un "Canal" de Ruby se asigna directamente a un "Canal" paramiko:

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

y luego en el código

@channel = @ssh_connection.open_channel do |new_channel|

Editar: Para explicar aún más mi pregunta, pude conectarme a un host remoto usando paramiko y ejecutar múltiples comandos secuenciales y obtener sus resultados sin usar un transporte o un canal, así que nuevamente, ¿cuáles son las razones para usar un canal en 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()

Respuestas a la pregunta(1)

Su respuesta a la pregunta