Automatizzare l'ingresso in SecureCRT utilizzando gli script

Gli ingegneri di rete spesso affrontano il compito di copiare/incollare determinati frammenti da un blocco note alla console. Di solito devi copiare diversi parametri: nome utente/password e qualcos'altro. L'uso di script consente di velocizzare questo processo. MA le attività di scrittura dello script ed esecuzione dello script dovrebbero richiedere meno tempo in totale rispetto alla configurazione manuale, altrimenti gli script sono inutili.

A cosa serve questo articolo? Questo articolo fa parte della serie Fast Start e ha lo scopo di far risparmiare tempo ai tecnici di rete durante la configurazione delle apparecchiature (singola attività) su più dispositivi. Utilizza il software SecureCRT e la funzionalità di esecuzione degli script integrata.

contenuto

Introduzione

Il programma SecureCRT ha un meccanismo di esecuzione di script integrato pronto all'uso. A cosa servono gli script di terminale?

  • I/O automatizzato e convalida I/O minima.
  • Accelera l'esecuzione delle attività di routine, riducendo le pause tra le impostazioni dell'apparecchiatura. (Riduzione de facto delle pause causate dal tempo per eseguire azioni di copia/incolla sullo stesso hardware, con 3 o più frammenti di comando da applicare all'hardware.)

Questo documento copre le attività:

  • Creazione di semplici script.
  • Esecuzione di script su SecureCRT.
  • Esempi di utilizzo di script semplici e avanzati. (Pratica dalla vita reale.)

Creazione di semplici script.

Gli script più semplici utilizzano solo due comandi, Send e WaitForString. Questa funzionalità è sufficiente per il 90% (o più) delle attività eseguite.

Gli script possono funzionare in Python, JS, VBS (Visual Basic), Perl, ecc.

Python

# $language = "Python"
# $interface = "1.0"
def main():
  crt.Screen.Synchronous = True
  crt.Screen.Send("r")
  crt.Screen.WaitForString("name")
  crt.Screen.Send("adminr")
  crt.Screen.WaitForString("Password:")
  crt.Screen.Send("Password")
  crt.Screen.Synchronous = False
main()

Di solito un file con estensione "*.py"

VBS

# $language = "VBScript"
# $interface = "1.0"
Sub Main
  crt.Screen.Synchronous = True
  crt.Screen.Send vbcr
  crt.Screen.WaitForString "name"
  crt.Screen.Send "cisco" & vbcr
  crt.Screen.WaitForString "assword"
  crt.Screen.Send "cisco" & vbcr
  crt.Screen.Synchronous = False
End Sub

Di solito un file con estensione "*.vbs"

Creare uno script utilizzando una voce di script.

Consente di automatizzare il processo di scrittura di uno script. Inizi a scrivere una sceneggiatura. SecureCRT registra i comandi e la successiva risposta hardware e visualizza lo script finito per te.

UN. Inizia a scrivere la sceneggiatura:
Menu SecureCRT => Script => Avvia la registrazione dello script
B. Eseguire azioni con la console (eseguire i passaggi di configurazione nella CLI).
v. Finisci di scrivere la sceneggiatura:
Menu SecureCRT => Script => Interrompi registrazione script...
Salva il file dello script.

Esempio di comandi eseguiti e script salvato:

Automatizzare l'ingresso in SecureCRT utilizzando gli script

Esecuzione di script su SecureCRT.

Dopo aver creato/modificato lo script, sorge spontanea una domanda: come applicare lo script?
Esistono diversi modi:

  • Esecuzione manuale dal menu Script
  • Avvio automatico dopo la connessione (script di accesso)
  • Accesso automatico senza utilizzare uno script
  • Attivazione manuale con un pulsante in SecureCRT (un pulsante deve ancora essere creato e aggiunto a SecureCRT)

Esecuzione manuale dal menu Script

Menu SecureCRT => Script => Esegui...
- Gli ultimi 10 script vengono ricordati e disponibili per l'avvio rapido:
Menu SecureCRT => Script => 1 "Nome file script"
Menu SecureCRT => Script => 2 "Nome file script"
Menu SecureCRT => Script => 3 "Nome file script"
Menu SecureCRT => Script => 4 "Nome file script"
Menu SecureCRT => Script => 5 "Nome file script"

Avvio automatico dopo la connessione (script di accesso)

Le impostazioni dello script di registrazione automatica sono configurate per la sessione salvata: Connessione => Azioni di accesso => ​​Script di accesso

Automatizzare l'ingresso in SecureCRT utilizzando gli script

Accesso automatico senza utilizzare uno script

È possibile inserire automaticamente il nome utente della password senza scrivere uno script, utilizzando solo la funzionalità integrata di SecureCRT. Nelle impostazioni di connessione "Connessione" => Azioni di accesso => ​​Accesso automatico - è necessario compilare diversi pacchetti - che significano le coppie: "Testo previsto" + "Caratteri inviati a questo testo" possono esserci molte di queste coppie. (Esempio: 1a coppia in attesa del nome utente, seconda in attesa della password, terza in attesa del prompt della modalità privilegiata, quarta coppia della password della modalità privilegiata.)

Esempio di accesso automatico su Cisco ASA:

Automatizzare l'ingresso in SecureCRT utilizzando gli script

Attivazione manuale con un pulsante in SecureCRT (un pulsante deve ancora essere creato e aggiunto a SecureCRT)

In SecureCRT, puoi assegnare uno script a un pulsante. Il pulsante viene aggiunto a un pannello appositamente creato per questo scopo.

UN. Aggiunta di un pannello all'interfaccia: Menu SecureCRT => Visualizza => Barra dei pulsanti
B. Aggiungi un pulsante al pannello e aggiungi uno script. – Fare clic con il pulsante destro del mouse sulla barra dei pulsanti e selezionare "Nuovo pulsante..." dal menu contestuale.
v. Nella finestra di dialogo "Pulsante mappa", nel campo "Azione", selezionare l'azione (funzione) "Esegui script".
Specificare una didascalia per il pulsante. Il colore dell'icona del pulsante. Completare le impostazioni facendo clic su Ok.

Automatizzare l'ingresso in SecureCRT utilizzando gli script

Nota:

Il pannello con i pulsanti è una funzionalità molto utile.

1. È possibile, quando si accede a una sessione specifica, specificare quale pannello aprire in questa scheda per impostazione predefinita.

2. È possibile impostare azioni predefinite per azioni standard con l'apparecchiatura: mostra mostra versione, mostra esecuzione-config, salva configurazione.

Automatizzare l'ingresso in SecureCRT utilizzando gli script
Nessuno script è associato a questi pulsanti. Solo linea d'azione:

Automatizzare l'ingresso in SecureCRT utilizzando gli script
Impostazioni: in modo che quando si passa a una sessione, il pannello necessario con i pulsanti si apra nelle impostazioni della sessione:

Automatizzare l'ingresso in SecureCRT utilizzando gli script
Ha senso che il cliente imposti script individuali per il login e vada al pannello con comandi frequenti per il fornitore.

Automatizzare l'ingresso in SecureCRT utilizzando gli script
Quando si preme il pulsante Go Cisco, il pannello passa alla barra dei pulsanti Cisco.

Automatizzare l'ingresso in SecureCRT utilizzando gli script

Esempi di utilizzo di script semplici e avanzati. (Pratica dalla vita reale.)

Gli script semplici sono sufficienti per quasi tutte le occasioni. Ma una volta avevo bisogno di complicare un po 'la sceneggiatura, per accelerare il lavoro. Questa complicazione richiedeva solo dati aggiuntivi in ​​una finestra di dialogo dall'utente.

Richiesta di dati dall'utente tramite una finestra di dialogo

Ne avevo 2 nello script di richiesta dati.Questo è il nome host e il 4° ottetto dell'indirizzo IP. Per eseguire questa azione, ho cercato su Google come farlo e l'ho trovato sul sito Web ufficiale di SecureCRT (vandyke). - la funzionalità si chiama prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Enter hostname:", "hostname", "", False)
	ipaddressstr = crt.Dialog.Prompt("Enter ip address:", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 23r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r") 

Questa parte dello script richiedeva il nome host e i numeri dall'ultimo ottetto. Poiché c'erano 15 pezzi di equipaggiamento. E i dati sono stati presentati in una tabella, quindi ho copiato i valori dalla tabella e li ho incollati nelle finestre di dialogo. Inoltre la sceneggiatura ha funzionato in modo indipendente.

Copia FTP su apparecchiature di rete.

Questo script ha avviato la mia finestra di comando (shell) e ha copiato i dati tramite FTP. Al termine, chiudi la sessione. È impossibile utilizzare il blocco note per questo, poiché la copia richiede molto tempo e i dati nel buffer FTP non verranno archiviati per così tanto tempo:

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("ftp 192.168.1.1r")
	crt.Screen.WaitForString("Name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("binaryr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("put S5720LI-V200R011SPH016.patr")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("quitr")
	crt.Screen.Synchronous = False
main()

Inserimento di nome utente/password utilizzando uno script

A un cliente l'accesso diretto alle apparecchiature di rete è stato chiuso. Era possibile entrare negli apparati collegandosi prima al Default Gateway, e da questo poi agli apparati ad esso collegati. Per la connessione è stato utilizzato il client ssh integrato nel software IOS/hardware. Di conseguenza, il nome utente e la password sono stati richiesti nella console. Con lo script seguente, il nome utente e la password sono stati inseriti automaticamente:

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("snmpadminr")
	crt.Screen.WaitForString("assword:")
	crt.Screen.Send("Passwordr")
	crt.Screen.Synchronous = False
main()

Nota: c'erano 2 script: uno per l'account amministratore, il secondo per l'account eSIGHT.

Script con la possibilità di aggiungere direttamente i dati durante l'esecuzione dello script.

Il compito era aggiungere un percorso statico su tutte le apparecchiature di rete. Ma il gateway per Internet su ciascuna apparecchiatura era diverso (e differiva dal gateway predefinito). Il seguente script ha visualizzato la tabella di routing, è entrato nella modalità di configurazione, non ha scritto il comando fino alla fine (l'indirizzo IP del gateway su Internet) - ho aggiunto questa parte. Dopo aver premuto Invio, lo script ha continuato a eseguire il comando.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("Zdes-mogla-bit-vasha-reklamar")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("show run | inc ip router")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("conf tr")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("endr")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("copy run star")
	crt.Screen.WaitForString("[startup-config]?")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("exitr")
	crt.Screen.Synchronous = False
main()

In questo script, nella riga: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") non viene aggiunto l'indirizzo IP del gateway e non è presente alcun carattere di ritorno a capo. Lo script è in attesa della riga successiva con i caratteri "(config) #" Questi caratteri sono apparsi dopo che ho inserito l'indirizzo IP e sono entrato.

Conclusione:

Quando si scrive uno script e lo si esegue, è necessario seguire la regola: il tempo per scrivere uno script ed eseguire uno script non dovrebbe mai essere superiore al tempo teoricamente impiegato per eseguire lo stesso lavoro manualmente (copia / incolla da un blocco note, scrittura e debug un playbook per ansible, scrittura e debug di script python). Cioè, l'uso dello script dovrebbe far risparmiare tempo e non perdere tempo nell'automazione dei processi una tantum (ovvero, quando lo script è unico e non ci saranno più ripetizioni). Ma se lo script è unico e l'automazione con lo script e la scrittura/il debug dello script richiede meno tempo che farlo in qualsiasi altro modo (ansible, finestra di comando), allora lo script è la soluzione migliore.
Debug di uno script. Lo script cresce gradualmente, il debugging avviene durante il run-in sul primo, secondo, terzo dispositivo e molto probabilmente entro il quarto lo script sarà pienamente operativo.

L'esecuzione di uno script (inserendo nome utente+password) con il mouse è in genere più veloce rispetto alla copia di nome utente e password da un blocco note. Ma non sicuro dal punto di vista della sicurezza.
Un altro (reale) esempio quando si utilizza uno script: non si ha accesso diretto alle apparecchiature di rete. Ma è necessario configurare tutte le apparecchiature di rete (inserirle nel sistema di monitoraggio, configurare un nome utente/password/nomeutente/password snmpv3 aggiuntivo). C'è accesso quando vai allo switch Core, da esso apri SSH ad altre apparecchiature. Perché non puoi usare Ansible. - Perché ci imbattiamo in un limite al numero di sessioni simultanee consentite su apparecchiature di rete (linea vty 0 4, interfaccia utente vty 0 4) (un'altra domanda è come avviare apparecchiature diverse in Ansible con lo stesso primo hop SSH).

Lo script riduce il tempo durante le operazioni lunghe, ad esempio la copia di file tramite FTP. Al termine della copia, lo script inizia immediatamente a funzionare. Una persona dovrà vedere la fine della copia, quindi rendersi conto della fine della copia, quindi inserire i comandi appropriati. Lo script lo fa oggettivamente più velocemente.

Gli script sono applicabili dove è impossibile utilizzare strumenti di consegna di dati di massa: Console. O quando alcuni dei dati per l'apparecchiatura sono univoci: nome host, indirizzo IP di gestione. Oppure quando si scrive un programma e si esegue il debug è più difficile che aggiungere i dati ricevuti dall'apparecchiatura mentre lo script è in esecuzione. - Un esempio con uno script per prescrivere un percorso, quando ogni apparecchiatura ha il proprio indirizzo IP del provider Internet. (I miei colleghi hanno scritto tali script - quando il DMVPN parlava era più di 3. Era necessario modificare le impostazioni DMVPN).

Caso di studio: configurazione delle impostazioni iniziali su un nuovo switch utilizzando le porte della console:

A. Collegato il cavo della console al dispositivo.
B. Eseguire lo script
B. Atteso per l'esecuzione dello script
D. Collegato il cavo della console al dispositivo successivo.
E. Se l'interruttore non è l'ultimo, andare al passaggio B.

Come risultato del lavoro della sceneggiatura:

  • la password iniziale è impostata sull'apparecchiatura.
  • Nome utente inserito
  • viene inserito l'indirizzo IP univoco del dispositivo.

PS l'operazione doveva essere ripetuta. Perché ssh predefinito non è stato configurato/disabilitato. (Sì, questo è un mio errore.)

Fonti utilizzate.

1. Informazioni sulla creazione di script
2. Esempi di sceneggiatura

Appendice 1: Script di esempio.


Un esempio di script lungo, con due query: nome host e indirizzo IP. Nasce per preimpostare gli apparati tramite console (9600 baud). E anche per preparare la connessione delle apparecchiature alla rete.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("r")
	crt.Screen.WaitForString("name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.Send("sysr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface Vlanif 1r")
	crt.Screen.WaitForString("Vlanif1]")
	crt.Screen.Send("undo ip addressr")
	crt.Screen.Send("shutdownr")
	crt.Screen.Send("vlan 100r")
	crt.Screen.Send(" description description1r")
	crt.Screen.Send(" name description1r")
	crt.Screen.Send("vlan 110r")
	crt.Screen.Send(" description description2r")
	crt.Screen.Send(" name description2r")
	crt.Screen.Send("vlan 120r")
	crt.Screen.Send(" description description3r")
	crt.Screen.Send(" name description3r")
	crt.Screen.Send("vlan 130r")
	crt.Screen.Send(" description description4r")
	crt.Screen.Send(" name description4r")
	crt.Screen.Send("vlan 140r")
	crt.Screen.Send(" description description5r")
	crt.Screen.Send(" name description5r")
	crt.Screen.Send("vlan 150r")
	crt.Screen.Send(" description description6r")
	crt.Screen.Send(" name description6r")
	crt.Screen.Send("vlan 160r")
	crt.Screen.Send(" description description7r")
	crt.Screen.Send(" name description7r")
	crt.Screen.Send("vlan 170r")
	crt.Screen.Send(" description description8r")
	crt.Screen.Send(" name description8r")               
	crt.Screen.Send("vlan 180r")
	crt.Screen.Send(" description description9r")
	crt.Screen.Send(" name description9r")
	crt.Screen.Send("vlan 200r")
	crt.Screen.Send(" description description10r")
	crt.Screen.Send(" name description10r")
	crt.Screen.Send("vlan 300r")
	crt.Screen.Send(" description description11r")
	crt.Screen.Send(" name description11r")
	crt.Screen.Send("quitr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("stp region-configurationr")
	crt.Screen.Send("region-name descr")
	crt.Screen.Send("active region-configurationr")
	crt.Screen.WaitForString("mst-region]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("stp instance 0 priority 57344r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/42r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Usersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type hybridr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan 100 enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan legacy enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid pvid vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid tagged vlan 100r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid untagged vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range GigabitEthernet 0/0/43 to GigabitEthernet 0/0/48r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Printersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type accessr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port default vlan 130r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range XGigabitEthernet 0/0/1 to XGigabitEthernet 0/0/2r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description uplinkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type trunkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 100 110 120 130 140 150 160 170 180 200r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 300r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.4r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.2r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.134r")
	crt.Screen.Send("ip route-static 0.0.0.0 0.0.0.0 10.10.10.254r")
	crt.Screen.Send("interface Vlanif 200r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
        hostnamestr = crt.Dialog.Prompt("Enter hostname:", "hostname", "", False)
        ipaddressstr = crt.Dialog.Prompt("Enter ip address:", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 24r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r")
	crt.Screen.WaitForString("]")
	crt.Screen.Synchronous = False
main()

Tali script di solito non sono necessari, ma la quantità di attrezzatura è di 15 pezzi. Configurazione più rapida consentita. È stato più rapido configurare l'apparecchiatura utilizzando la finestra di comando SecureCRT.

Configurazione di un account per ssh.

Un altro esempio. La configurazione avviene anche tramite la console.

# $language = "Python"
# $interface = "1.0"

# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.

def main():
	crt.Screen.Synchronous = True
	crt.Screen.Send("r")
	crt.Screen.WaitForString("name")
	crt.Screen.Send("adminr")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Passwordr")
	crt.Screen.WaitForString(">")
	crt.Screen.Send("sysr")
	crt.Screen.Send("stelnet server enabler")
	crt.Screen.Send("aaar")
	crt.Screen.Send("local-user admin service-type terminal ftp http sshr")
	crt.Screen.Send("quitr")
	crt.Screen.Send("user-interface vty 0 4r")
	crt.Screen.Send("authentication-mode aaar")
	crt.Screen.Send("quitr")
	crt.Screen.Send("quitr")
	crt.Screen.Synchronous = False
main()


Informazioni su SecureCRT:Software a pagamento: da $99 (il prezzo minimo è solo per SecureCRT per un anno)
Sito ufficiale
Una licenza software viene acquistata una volta, con supporto (per l'aggiornamento), quindi il software viene utilizzato con questa licenza per un tempo illimitato.

Funziona su sistemi operativi Mac OS X e Windows.

C'è il supporto per gli script (questo articolo)
C'è Finestra di comando
Sistema operativo seriale/Telnet/SSH1/SSH2/Shell

Fonte: habr.com