es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Configurar túnel de proxy en Netmiko/Paramiko.

Máquina anfitriona —- Jumpserver (contraseña de cuenta y luego contraseña de token RSA) —- SSH a dispositivos Cisco.

¿Cómo creo sesiones de SSH a dispositivos finales después de que se establece una conexión SSH al host de salto utilizando el siguiente código?
También, si hay una mejor manera de manejar la autenticación con Jumpserver que solicita contraseña de autenticación y token RSA como Link.

import paramiko
from paramiko import SSHException
import logging

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)

ssh.connect(hostname="jump_server_ip", port=22)
ssh.get_transport().auth_interactive_dumb(("nombre de usuario", "contraseña"))

Después de ejecutar este comando ssh.get_transport().auth_interactive_dumb(username="nombre de usuario")
Recibo este Link.

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear sesiones SSH a dispositivos finales después de la conexión SSH al host de salto, puede utilizar la clase paramiko.Transport.

    Primero, cree un objeto paramiko.Transport usando la conexión del servidor de salto:

    transport = ssh.get_transport()
    

    A continuación, autentíquese con el servidor de salto usando la contraseña de la cuenta y la contraseña del token RSA:

    transport.auth_interactive(username='username', handler=MyHandler())
    

    Tenga en cuenta que en lugar de usar auth_interactive_dumb, estamos usando auth_interactive y pasando un controlador interactivo personalizado MyHandler, que definiremos más adelante. Esto nos permite manejar la ventana de autenticación que solicita la contraseña del token RSA.

    Ahora que estamos autenticados con el servidor de salto, podemos abrir una nueva sesión SSH al dispositivo final utilizando la clase paramiko.SSHClient:

    ssh_session = ssh.invoke_shell()
    

    Tenga en cuenta que se utiliza invoke_shell en lugar de connect porque ya estamos conectados al servidor de salto.

    Ahora podemos enviar comandos al dispositivo final de esta manera:

    ssh_session.send('show version\n')
    output = ssh_session.recv(65535).decode('utf-8')
    print(output)
    

    Para definir la clase MyHandler, puede utilizar el siguiente código:

    class MyHandler(paramiko.InteractiveQuery):
        def __init__(self):
            paramiko.InteractiveQuery.__init__(self)
            self.password = None
    
        def handler(self, title, instructions, prompt_list):
            # Comprueba si se trata de la ventana de autenticación del token RSA
            if 'passcode' in instructions.lower():
                # Pide la contraseña del token RSA al usuario.
                self.password = input('Ingrese la contraseña del token RSA: ')
                return [self.password + '\n'] * len(prompt_list)
    
            # Pide la contraseña de la cuenta al usuario
            self.password = getpass.getpass(prompt='Ingrese la contraseña: ')
            return [self.password + '\n'] * len(prompt_list)
    

    Esta clase maneja la ventana de autenticación verificando si está solicitando la contraseña del token RSA, y si es así, pide al usuario que la ingrese.

    Tenga en cuenta que también necesitará importar el módulo getpass en la parte superior de su script para usar la función getpass.getpass.

    En general, este enfoque proporciona una forma más segura de autenticarse con el servidor de salto y los dispositivos finales, ya que permite la autenticación de dos factores con el token RSA.

Comments are closed.