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 originalimport paramiko
import time
import cmd
resp=''
class conexionSSH:
'''Clase para conectarse a través de SSH'''
def __init__(self,server='172.16.0.2',port=22,user='xx',password='xz'):
'''Constructor de la clase, establece los argumentos para conectarse al servidor'''
self.server=server
self.port=22
self.user=user
self.password=password
def conectar(self):
'''Conecta al servidor usando los atributos pasados al constructor'''
try:
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(self.server,self.port,self.user,self.password)
print("COnexion lista")
except paramiko.ssh_exception.AuthenticationException as e:
print("ERROR 2: %s" %(str(e)))
except EOFError as e:
print("Cerrando sesión SSH: %s" % (e))
self.ssh.close()
def consox(self,shell):
'''Ciclo para intectuar con la shell'''
while True:
cmd=input(' ')
shell.send(cmd)
shell.send('\n')
time.sleep(0.5)
resp = shell.recv(9999)
print(resp.decode())
class conso(cmd.Cmd):
''' Clase para instaciar la shell de conexion SSH'''
def __init__ (self):
'''Constructor que instancia la ConexionSSH, y conecta al servidor'''
cmd.Cmd.__init__(self)
self.com=conexionSSH()
self.com.conectar()
def do_activate(self,comando):
'''Activata la Shell'''
shell=self.com.ssh.invoke_shell()
resp = shell.recv(9999)
print(resp.decode())
self.com.consox(shell)
def do_enable(self):
'''Comando de root '''
pass
consola=conso()
consola.cmdloop()