Bonjour,
Je suis actuellement sur laboratoire de test sur GNS3 pour un routeur CISCO et j'utlise dedans virtualbox pour le client Linux
En m'inspirant d'un script à disposition sur le site (http://perl.developpez.com/faq/perl/...heriques-CISCO) et du site metacpan (https://metacpan.org/pod/distributio...SSH/Expect.pod) j'ai pu du client Linux me connecter en SSH sur le routeur et faire un SCP pour rapatrier la configuration sur le client.
Ca marche mais c'est moche car j'utilise des sleep avec un délai d'attente au doigt mouillé au lieu des waitfor.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #!/usr/bin/perl use strict; use warnings; use 5.14.2; use Net::SSH::Expect; my $ssh = Net::SSH::Expect->new( host => "192.168.1.1", password => 'gns3', user => 'toto', raw_pty => 1 ); my $login_output = $ssh->login(); my $enable_passwd = "cisco"; $ssh->send("enable"); $ssh->waitfor( 'Password:\s*\z', 2 ) or die "prompt 'password' not found after 1 second"; $ssh->send($enable_passwd); ### Bloc ou les commandes passées et les résultats s'affichent à l'écran. my $line; # returns the next line, removing it from the input stream: while ( defined ($line = $ssh->read_line()) ) { $ssh->send("copy running-config scp://alexandre:Templier10!\@192.168.1.2/"); ### Pause de deux secondes pour laisser le temps d'afficher la commande scp au dessus. sleep (2); $ssh->send("\r"); $ssh->send("\r"); $ssh->send("\r"); print $line . "\n"; } print $ssh->peek(0); ### Pause de 15 secondes sinon déconnexion trop rapide pour copier le fichier de configuration et échecs. sleep (15); print "\n"; $ssh->close();
Ce qui s'affiche à l'écran est :
routeur1_hub#copy running-config scp://toto:tata@192.168.1.2/
Address or name of remote host [192.168.1.2]?
Destination username [alexandre]?
Destination filename [routeur1_hub-confg]?
Writing routeur1_hub-confg Sink: C0644 2745 routeur1_hub-confg
routeur1_hub#
Si les lignes avec "Adresse", "Destination", "Destination" un simple envoie de retour chariot suffit, savoir quand arrive le prompt avec le signe "#" à la fin est important sinon la déconnexion est trop rapide et il n'y pas de transfert possible.
Une idée, des pistes comment matcher le signer à la fin avec la commande waitfor ?
Merci
Partager