Librairie de connexion par SSH sur un routeur

Nous allons créer un script (monlibparamiko.py) qui va nous servir de librairie que nous pourront importer dans d’autres scripts.

Voici son contenu :

import paramiko
import time

def connect(ip_address, port_num, user, passwd):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    print('Connexion au routeur '+ip_address)
    ssh_client.connect(hostname=ip_address, port=port_num, username=user, password=passwd,
                       look_for_keys=False, allow_agent=False)
    return ssh_client

def get_shell(ssh_client):
    shell = ssh_client.invoke_shell()
    return shell

def send_command(shell, command, timout=1):
    shell.send(command + '\n')
    time.sleep(timout)

def show(shell, n=10000):
    output = shell.recv(n)
    return output.decode()

def close(ssh_client, ip_address):
    if ssh_client.get_transport().is_active() == True:
        print('Fermeture de la connexion au routeur '+ip_address)
        ssh_client.close()

Ce programme python permet de définir des fonctions qui peuvent être réutilisable dans d’autres programmes.

Par exemple, la fonction connect(ip_address, port_num, user, passwd) permet de se connecter par SSH sur l’équipement ayant comme adresse ip_address, sur le port ssh port_num avec comme login user et mot de passe passwd.

La fonction get_shell(ssh_client) permet de récupérer le SHELL qui lance la commande.

La fonction send_command(shell, command, timout=1) permet au shell d’exécuter la commande command et d’attendre un délai de timeout (en seconde) pour  récupérer la sortie. Ce délai, par défaut 1s, varie selon les commandes et les équipements.

La fonction show(shell, n=10000) permet d’afficher la sortie de la commande en spécifiant la taille (n).

Une connexion a été ouvert depuis le lancement de la fonction connect(). Maintenant après avoir terminé le travail, il est nécessaire de fermer la connexion. La fonction close(ssh_client, ip_address) est là pour assurer cela.