¿Implementar un shell interactivo sobre ssh en Python usando Paramiko?

Quiero escribir un programa (en Python 3.x en Windows 7) que ejecute múltiples comandos en un shell remoto a través de ssh. Después de mirar la función exec_command () de paramikos, me di cuenta de que no es adecuada para mi caso de uso (porque el canal se cierra después de ejecutar el comando), ya que los comandos dependen de las variables de entorno (establecidas por comandos anteriores) y no se pueden concatenado en una llamada exec_command () ya que se ejecutarán en diferentes momentos en el programa.

Por lo tanto, quiero ejecutar comandos en el mismo canal. La siguiente opción que analicé fue implementar un shell interactivo usando la función invoke_shell () de paramikos:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=psw, port=22)

channel = ssh.invoke_shell()

out = channel.recv(9999)

channel.send('cd mivne_final\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

channel.send('cd ..\n')
channel.send('cd or_fail\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

channel.send('cd ..\n')
channel.send('cd simulator\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

ssh.close() 

Hay algunos problemas con este código:

La primera 'impresión' no siempre imprime la salida 'ls' (a veces solo se imprime en la segunda 'impresión').Los primeros comandos 'cd' y 'ls' siempre están presentes en la salida (los obtengo a través del comando 'recv', como parte de la salida), mientras que los siguientes comandos 'cd' y 'ls' se imprimen a veces, y a veces no lo son.Los comandos segundo y tercero 'cd' y 'ls' (cuando se imprimen) siempre aparecen antes de la primera salida 'ls'.

Estoy confundido con este "no determinismo" y agradecería mucho su ayuda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta