Cómo ejecutar comandos de shell en una máquina remota usando Python – Paramiko

Paramiko es una biblioteca de Python que realiza una conexión con un dispositivo remoto a través de SSh. Paramiko está utilizando SSH2 como reemplazo de SSL para establecer una conexión segura entre dos dispositivos. También es compatible con el modelo de cliente y servidor SFTP.

Autenticando la conexión SSH

Para autenticar una conexión SSH, debemos configurar una clave RSA SSH privada (que no debe confundirse con OpenSSH). Podemos generar una clave usando el siguiente comando:

$ssh-keygen -t rsa

Esto nos pedirá que proporcionemos un nombre para nuestra clave. Asígnele el nombre que desee y genere un par de claves RSA pública/privada. Introduzca el nombre con el que desea guardar la clave.

es decir, /home/nombre de usuario/.ssh/id_rsa 

A continuación, se le pedirá que proporcione una contraseña (no dude en dejarlo en blanco).

Ahora que tenemos nuestra clave, debemos copiarla en nuestro host remoto. La forma más fácil de hacer esto es usando ssh-copy-id :

$ssh-copy-id -i ~/.ssh/mykey nombredeusuario@mi_host_remoto.org

Si desea verificar qué claves ya tiene, puede encontrarlas en el directorio .ssh de su sistema :

 ~/.sshCheck 

Estamos buscando claves que comiencen con el siguiente encabezado:

—–COMENZAR CLAVE PRIVADA DE RSA—–

—–FIN CLAVE PRIVADA RSA—–

SSH (Secure Shell) es una credencial de acceso que se utiliza en el protocolo SSH. En otras palabras, es un protocolo de red criptográfico que se utiliza para transferir datos cifrados a través de la red. Le permite conectarse a un servidor, o varios servidores, sin tener que recordar o ingresar su contraseña para cada sistema que va a iniciar sesión de forma remota de un sistema a otro.

Instalación de Paramiko

Para instalar la biblioteca paramiko, ejecute el siguiente comando en el símbolo del sistema. paramiko necesita criptografía como módulo de dependencia. Así que ejecute ambos comandos en el símbolo del sistema:

pip instalar paramiko

pip instalar criptografía

Nota: Para obtener más información, consulte Instalar Paramiko en Windows y Linux

Una vez completada la instalación, ahora nos conectaremos con un servidor SSH remoto usando la biblioteca paramiko. El fragmento de código para un equivalente se proporciona a continuación:

Python3

import paramiko
 
# Create object of SSHClient and
# connecting to SSH
ssh = paramiko.SSHClient()
 
# Adding new host key to the local
# HostKeys object(in case of missing)
# AutoAddPolicy for missing host key to be set before connection setup.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
ssh.connect('1.1.1.2', port=22, username='UserName',
            password='PassWord', timeout=3)
 
# Execute command on SSH terminal
# using exec_command
stdin, stdout, stderr = ssh.exec_command('show ip interface brief')

Tomando esto como base, uno puede automatizar las cosas de iniciar sesión en el servidor SSH remoto, ejecutar comandos y capturar los resultados, simplemente usando una secuencia de comandos de python.

Con esto, puede crear una conexión SSH a otro host desde su aplicación, con esta conexión puede enviar sus comandos al host y recuperar la salida. 

A continuación se muestra un programa para representar lo mismo. Aquí estamos imprimiendo el nombre de usuario.

Programa:

Python3

import paramiko
output_file = 'paramiko.org'
 
 
def paramiko_GKG(hostname, command):
    print('running')
    try:
        port = '22'
         
        # created client using paramiko
        client = paramiko.SSHClient()
         
        # here we are loading the system
        # host keys
        client.load_system_host_keys()
         
        # connecting paramiko using host
        # name and password
        client.connect(hostname, port=22, username='geeksForgeeks',
                       password='geeksForgeeks')
         
        # below line command will actually
        # execute in your remote machine
        (stdin, stdout, stderr) = client.exec_command(command)
         
        # redirecting all the output in cmd_output
        # variable
        cmd_output = stdout.read()
        print('log printing: ', command, cmd_output)
         
        # we are creating file which will read our
        # cmd_output and write it in output_file
        with open(output_file, "w+") as file:
            file.write(str(cmd_output))
             
        # we are returning the output
        return output_file
    finally:
        client.close()
 
 
paramiko_GKG('10.10.10.1', 'uname')

Producción:

$ python GFG_paramiko.py
running
[log printing: ,'uname','Linux\n']

Entonces, al ejecutar nuestro archivo Python, obtenemos una declaración impresa con el comando uname y Linux como salida. El mismo programa se puede modificar para diferentes comandos para obtener la información requerida.

Publicación traducida automáticamente

Artículo escrito por deepanshu_rustagi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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