Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/06/2015, 19:39
RaKKoS
 
Fecha de Ingreso: junio-2009
Ubicación: House
Mensajes: 38
Antigüedad: 15 años, 4 meses
Puntos: 1
Ejecutar un comando en el loop de la libreria CMD

Buenas gente de Forosweb! esperando que estén bien, vengo por estos a lados a pedir sugerencias de los que mas saben es decir de ustedes , estoy creando una aplicación con la librería paramiko para conectarme a diversos routers y administrarlos, pues ya lo he hecho sin problema alguno gracias a la fantástica librería Paramiko, el problema reside es que quiero tener una pequeña consola para administrar los router, que posea autocompletados, y que cuando use las fecha del teclado, up,down, me traiga los comandos pertinentes como si de nuestra terminal de Linux se tratase xD así que investigue y concluí que la librería que me ayudaría a mi propósito sería cmd, así que me documente un poco y logre realizar la shell, el problema es el siguiente que para poder activar la interacción del router tengo que primero teclear activate, y posteriormente ese método me permite entrar a los comandos del root, mi pregunta es la siguiente a los mas experimentados existe alguna forma de pasar la cadena activate automaticamente para entrar al root directamente a través del loop del cmd? o conocen alguna forma que me podrían sugerir? para los que no les quedo muy claro aquí les dejo el código, gracias de antemano!!!!!
Código Python:
Ver original
  1. import paramiko
  2. import time
  3. import cmd
  4. resp=''
  5.  
  6. class conexionSSH:
  7.     '''Clase para conectarse a través de SSH'''
  8.    
  9.     def __init__(self,server='172.16.0.2',port=22,user='xx',password='xz'):
  10.         '''Constructor de la clase, establece los argumentos para conectarse al servidor'''
  11.         self.server=server
  12.         self.port=22
  13.         self.user=user
  14.         self.password=password
  15.                
  16.     def conectar(self):
  17.           '''Conecta al servidor usando los atributos pasados al constructor'''
  18.           try:
  19.               self.ssh = paramiko.SSHClient()
  20.               self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  21.               self.ssh.connect(self.server,self.port,self.user,self.password)
  22.               print("COnexion lista")
  23.           except paramiko.ssh_exception.AuthenticationException as e:
  24.               print("ERROR 2: %s" %(str(e)))
  25.           except EOFError as e:
  26.               print("Cerrando sesión SSH: %s" % (e))
  27.               self.ssh.close()
  28.  
  29.     def consox(self,shell):
  30.        '''Ciclo para intectuar con la shell'''
  31.        while True:
  32.             cmd=input(' ')
  33.             shell.send(cmd)
  34.             shell.send('\n')
  35.             time.sleep(0.5)
  36.             resp = shell.recv(9999)
  37.             print(resp.decode())
  38.  
  39.  
  40. class conso(cmd.Cmd):
  41.     ''' Clase para instaciar la shell de conexion SSH'''
  42.  
  43.    
  44.     def __init__ (self):
  45.         '''Constructor que instancia la ConexionSSH, y conecta al servidor'''
  46.         cmd.Cmd.__init__(self)
  47.         self.com=conexionSSH()
  48.         self.com.conectar()
  49.     def do_activate(self,comando):
  50.         '''Activata la Shell'''
  51.         shell=self.com.ssh.invoke_shell()
  52.         resp = shell.recv(9999)
  53.         print(resp.decode())
  54.         self.com.consox(shell)
  55.     def do_enable(self):
  56.         '''Comando de root '''
  57.         pass
  58.        
  59.  
  60. consola=conso()
  61. consola.cmdloop()

Última edición por RaKKoS; 03/06/2015 a las 19:44