Paramiko: lectura desde la salida estándar del comando ejecutado de forma remota

así que estaba trabajando con paramiko para algunas pruebas básicas de SSH y no obtengo ningún resultado en la salida estándar. Aquí está mi código.

import paramiko client=paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) com="ls ~/desktop" client.connect('MyIPAddress',MyPortNumber, username='username', password='password') output="" stdin, stdout, stderr = client.exec_command(com) print "ssh succuessful. Closing connection" client.close() print "Connection closed" stdout=stdout.readlines() print stdout print com for line in stdout: output=output+line if output!="": print output else: print "There was no output for this command" 

Entonces, cuando ejecuto esto, el comando se ejecuta (como se ve si hago algo como un cp, el archivo se copia), pero siempre aparece “No hubo salida para este comando”. Cuando se imprime stdout = stdout.readlines (), [] es la salida. Además, si agrego una statement de impresión en el bucle for, nunca se ejecuta. ¿Podría alguien ayudarme aquí? ¡Gracias!

Has cerrado la conexión antes de leer líneas:

 import paramiko client=paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) com="ls ~/desktop" client.connect('MyIPAddress',MyPortNumber, username='username', password='password') output="" stdin, stdout, stderr = client.exec_command(com) print "ssh succuessful. Closing connection" stdout=stdout.readlines() client.close() print "Connection closed" print stdout print com for line in stdout: output=output+line if output!="": print output else: print "There was no output for this command" 

* Ejemplo interactivo: ==== Parte 1, esto muestra la salida sh en el servidor, al final de es “>” necesita alguna entrada para continuar o salir ======

selilsosx045: uecontrol-CXC_173_6456-R32A01 lteue $ ./uecontrol.sh -host localhost Control de UE: Inicie el control de UE con: UE Control: java -Dlogdir/servicio/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios/servicios jar -host localhost Cargando las propiedades desde el archivo /Users/lteue/Downloads/uecontrol-CXC_173_6456-R32A01/etc/uecontrol.properties Inicio de CLI remoto hacia host localhost Ingrese el comando Q para salir del CLI, o el comando HELP para obtener información disponible. comandos El CLI está listo para la entrada. uec>

=========== código Pyhton con peramiko ============ *

Pruebe el siguiente método: mientras no sea stdout.channel.exit_status_ready ():

 def shCommand(server_list): server_IP = server_list[0] username = server_list[1] password = server_list[2] ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(server_IP,22,username, password)strong text commandList = ['list \n'] alldata = getUeInfo(ssh,commandList) ssh.close() def getUeInfo(ssh,commandList): data_buffer = "" num_of_input = 0 stdin, stdout, stderr = ssh.exec_command('cmd') while not stdout.channel.exit_status_ready(): solo_line = "" if stdout.channel.recv_ready(): solo_line = stdout.channel.recv(1024) # Retrieve the first 1024 bytes data_buffer += solo_line if(cmp(solo_line,'uec> ') ==0 ): #len of solo should be 5 , if num_of_input == 0 : data_buffer = "" for cmd in commandList : #print cmd stdin.channel.send(cmd) num_of_input += 1 if num_of_input == 1 : stdin.channel.send('q \n') num_of_input += 1 return data_buffer