Quando si tratta di networking, c'è una vasta gamma di prospettive e non si può padroneggiare come interagire con tutti i dispositivi nel mondo reale. Tuttavia, tutti i dispositivi di rete condividono funzionalità simili che, una volta padroneggiate, sono automatizzabili.
Come menzionato negli altri miei tutorial, i programmatori sono pigri e cercano sempre di migliorare l'efficienza, facendo così il minimo lavoro 🙂 -, e quando si tratta di automatizzare i problemi relativi alla rete, molti spesso colgono l'occasione.
Nella guida rapida di oggi, ti presenterò all'automazione di SSH utilizzando due famose librerie Python: Paramiko e Netmiko. Creeremo semplici script Python utilizzando le due librerie per automatizzare SSH e interagire con i dispositivi di rete.
Scelgo questo approccio perché una guida focalizzata principalmente sulle differenze tra Paramiko e Netmiko sarebbe troppo corta - basterebbe una semplice tabella - e non c'è cemento. Adottando questo approccio, sarai in grado di sperimentarli meglio e vedere cosa fa cosa e come.
Iniziamo:
Cos'è Paramiko?
Il sito ufficiale definisce Paramiko come segue:
“Paramiko è un pitone (2.7, 3.4+) implementazione del protocollo SSHv2 che fornisce funzionalità sia client che server."
spero di essere stato chiaro. Fondamentalmente, significa Paramiko è una libreria Python per interagire con SSH.
Adesso:
Quando vogliamo accedere a un server, sappiamo che andiamo su terminal-cmd, xterm, MobaXterm o solo su Gnome Terminal-login, quindi eseguiamo i comandi.
Vediamo come Paramiko può aiutare in questo.
Come installare Paramiko
Per usare Paramiko, dobbiamo installarlo. Dovresti avere Python - preferibilmente python 2 - installato sulla tua macchina. Usando pip, inserisci il comando seguente per installare Paramiko.
sudo pip install ParamikoPython -m pip install paramiko
Se stai cercando di creare dal sorgente, fai riferimento al repository GitHub ufficiale di Paramiko utilizzando la risorsa fornita:
https://github.com/paramiko/paramiko
Connessione a SSH utilizzando Paramiko
Per connetterci a SSH usando Paramiko, usiamo il metodo connect(), che richiede il parametro hostname: supporta anche altri parametri, ma poiché non li richiediamo, per ora possiamo ignorarli.
connect(hostname, port=22, username=Nessuno, password=Nessuno, pkey=None, key_filename=Nessuno, timeout=Nessuno, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex= False, gss_deleg_creds=True, gss_host=Nessuno, banner_timeout=Nessuno, auth_timeout=Nessuno, gss_trust_dns=True, passphrase=Nessuno, disabled_algorithms=Nessuno)Utilizzando questa funzione, disponibile in paramiko. Cliente.SSHclient.connect(), si connette al nome host specificato e lo autentica. Il sistema di destinazione viene confrontato con le chiavi di sistema locali esistenti (attendibili).
Se hai un file host specifico, puoi utilizzare il metodo load_host_keys() e impostare il client SSH Paramiko per aggiungere qualsiasi host sconosciuto a paramiko.Criterio di aggiunta automatica(). Se stai utilizzando il client in sistemi non attendibili, evita di utilizzare il paramiko.Criterio di aggiunta automatica.
Connessione di SSH con una password
Dal metodo connect, possiamo vedere che abbiamo i parametri username e password che possiamo usare per connetterci al sistema. Considera il codice seguente per connettere SSH tramite nome utente e password.
da paramiko import util, SSHClient, AutoAddPolicyclient = SSHClient()
cliente.load_system_host_keys()
cliente.load_host_keys("/home/linuxhint/.ssh/host_noti")
cliente.set_missing_host_key_policy(AutoAddPolicy())
cliente.connect(hostname="linuxhint.it", username="admin", password="AdminPassword")
cliente.vicino()
Se riscontri problemi durante l'importazione della classe Paramiko SSHClient, fai riferimento alla seguente domanda di stackoverflow:
https://stackoverflow.com/questions/29378234/python-import-paramiko-error-cannot-import-name-util
Connessione SSH tramite chiave
Come tutti sappiamo, connettere SSH tramite chiave è più sicuro rispetto all'utilizzo di una password non elaborata. Paramiko lo sa e ti permette di passare il file chiave e connetterti al sistema di destinazione.
Considera il codice qui sotto.
da paramiko import SSHClientda paramiko AutoAddPolicy
client = SSHClient()
cliente.load_system_host_keys()
cliente.load_host_keys('/home/linuxhint/.ssh/host_noti')
cliente.set_missing_host_key_policy(AutoAddPolicy())
cliente.connect('linuxhint.com',username='admin',key_filename='ssh_key.pem', passphrase='AdminPassphrase')
cliente.vicino()
Esecuzione di comandi su SSH
Una volta ottenuto l'accesso al sistema tramite SSH (su Paramiko), puoi eseguire una serie di comandi. Considera il seguente frammento di codice:
client = SSHClient()cliente.load_system_host_keys()
cliente.connect('linuxhint.com')
stdin, stdout, stderr = client.exec_command('bash")
standard.vicino()
stdout.vicino()
stderr.vicino()
cliente.vicino()
A questo punto, sai come usare la libreria Paramiko per automatizzare SSH. Come puoi immaginare, questa non è una guida Paramiko completa e non ci addentriamo nei dettagli relativi a ciò che fa lo strumento. L'obiettivo era quello di mostrarvi la sua implementazione.
Per ulteriori informazioni, fare riferimento a materiali più completi come:
https://docs.paramiko.org/it/stabile/
https://github.com/paramiko/paramiko
Cos'è Netmiko??
Netmiko è molto popolare e simile a Paramiko con alcune differenze significative:
- Supporto per dispositivi
- Prestazione
Quando lavori su reti reali, ti imbatterai in vari modelli di dispositivi. Pertanto, hai bisogno di uno strumento affidabile che possa aiutarti ad automatizzare il processo. In alcuni casi, non è possibile utilizzare Paramiko a causa di limitazioni del supporto del dispositivo, con conseguenti ritardi e arresti anomali: è possibile controllare i dispositivi supportati sulla documentazione ufficiale. È anche notevolmente più lento di Netmiko.
Paramiko è più un modulo SSH generico che puoi utilizzare per automatizzare attività SSH specifiche. Al contrario, Netmiko è più ampio e ben ottimizzato per la gestione di dispositivi di rete come switch e router.
L'astrazione è l'altro vantaggio dell'utilizzo di Netmiko. Netmiko fornisce una semplice funzione che puoi usare per disabilitare il paging. Ad esempio, un output della sessione SSH potrebbe essere più di una pagina. Usando sessioni SSH regolari, dovrai aggiungere uno spazio simile a un input per mostrare la pagina successiva. Netmiko ti offre un modo per ignorare questo.
I vantaggi di Netmiko rispetto a Paramiko sono:
- Connettiti automaticamente tramite SSH ai dispositivi di rete.
- Fornisce un'esecuzione più semplice dei comandi show e dell'output dei dati.
- Fornisce funzionalità più semplici per i comandi di configurazione, incluse le azioni di commit.
- Supporto multi-dispositivo tra piattaforme e fornitori di dispositivi di rete.
Come installare Netmiko
Anche l'installazione di Netmiko è relativamente semplice:
Tutto quello che devi fare è assicurarti di avere Python e pip installati sul tuo sistema ed eseguire il comando:
pip install netmikopython -m pip install netmiko
Connessione a SSH tramite Netmiko
La connessione alle sessioni SSH del dispositivo utilizzando Netmiko è molto semplice. Ricorda che Netmiko è più ottimizzato per dispositivi come router e non generico SSH.
Considera lo snippet di codice qui sotto.
#importare modulida netmiko import ConnectHandler
# informazioni sul dispositivo in formato dizionario.
device_config =
“tipo_dispositivo”: “cisco_ios”,
“ip”: “192.168.0.1",
“nome utente”: “admin”,
“password”: “password”,
“segreto”: “password”
connessione = ConnectHandler(**device_config)
Usando il semplice codice sopra, avrai una connessione SSH al dispositivo. Puoi anche passare direttamente le informazioni sul dispositivo invece di passarle a un dizionario.
Una volta che hai una sessione SSH, puoi eseguire comandi usando la funzione send_command()(). Le funzioni supportate da netmiko includono:
Metodi comunemente usati da Netmiko:
- net_connect.send_command() - Questa funzione invia comandi lungo un canale di rete e restituisce l'output in base al pattern.
- net_connect.send_command_timing() - Restituisce l'output in base alla temporizzazione da un comando inviato su un canale di rete.
- net_connect.send_config_set() - Applica le impostazioni di configurazione ai dispositivi remoti.
- net_connect.send_config_from_file() - Applica le impostazioni di configurazione da un file esterno
- net_connect.save_config() - Esporta e salva la configurazione in esecuzione come configurazione di avvio.
- net_connect.enable() - Interroga il dispositivo per attivare la modalità di abilitazione.
- net_connect.find_prompt() - Restituisce il prompt del router corrente
- net_connect.commit() - Esegue i comandi di commit su dispositivi come Juniper e IOS-XR
- net_connect.scollega() - Termina le sessioni
- net_connect.write_channel() - Abilita la scrittura a basso livello
- net_connect.read_channel() - Abilita la lettura a basso livello.
Come accennato in precedenza, questa non è una guida su come utilizzare Netmiko ma una semplice direzione su cosa sono Netmiko e Paramiko. Controlla la documentazione ufficiale per maggiori informazioni.
https://github.com/ktbyers/netmiko
Conclusione
In questa guida rapida, abbiamo discusso come utilizzare paramiko per le connessioni SSH generiche e la gestione dei dispositivi di rete Netmiko, illustrando le differenze tra i due.
Concludere:
Paramiko | Netmiko |
Utile per l'uso generico di ssh | Molto utile per la configurazione del dispositivo di rete. |
Supporto limitato per un'ampia gamma di dispositivi di rete. | Supporta un'ampia gamma di dispositivi di rete. |