Saltar al contenido

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

Si hallas algún problema en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.

Solución:

Ha cerrado la conexión antes de leer las 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 “>” necesita alguna entrada para continuar o salir ======

selilsosx045:uecontrol-CXC_173_6456-R32A01 lteue$ ./uecontrol.sh -host localhost UE Control: Inicie el control UE usando: UE Control:java -Dlogdir= -Duecontrol.configdir=./etc -jar ./server/server-R32A01. jar -host localhost Cargando propiedades desde el archivo /Users/lteue/Downloads/uecontrol-CXC_173_6456-R32A01/etc/uecontrol.properties Iniciando CLI remota hacia host localhost Ingrese el comando Q para salir de CLI, o el comando HELP para obtener información sobre comandos La CLI está lista para la entrada.
uec>

===========Código Python con peramiko ============*

Pruebe el siguiente método: mientras no 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 

Reseñas y puntuaciones

Más adelante puedes encontrar las referencias de otros usuarios, tú asimismo tienes la habilidad insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *