2010-08-13 4 views
-1

J'ai le code suivant qui se connecte très bien à mon routeur. Le problème est qu'une fois connecté, j'essaie de passer la commande "sh ver" qui ne passe jamais au routeur. Merci de votre aide!Script de sauvegarde de routeur

require 'net/telnet'

cisco = '1.1.1.1' #Enter the IP address here 
user = 'admin' #Enter username here 
pass = 'mypass' #Enter password here 

tn = Net::Telnet::new('Host' => cisco, 'prompt' => /^\Username:/) 
tn.cmd('String'=>'admin', 'Match'=>/Password:/) { |c| puts c } 
tn.cmd(pass) { |c| puts c } 

------------------Does not work below this line--------------------- 
tn.cmd('String'=>'sh ver') 

Répondre

1

Le problème est que vous définissez 'prompt' à une expression qui correspond à Nom d'utilisateur: (mise en garde: vous avez une barre oblique inverse là, il correspond probablement en fait serName :) Donc, quand vous faites tn.cmd (pass), il envoie le mot de passe alors qu'il attend Username: (ou SERNAME :).

Modifiez «invite» en une regex qui correspond à l'invite habituelle de votre Cisco (l'invite que vous voyez après la connexion avec succès).

+0

J'ajouterai qu'il veut probablement utiliser waitfor pour l'invite initiale du nom d'utilisateur. –

0

Donc, c'est le code que j'ai utilisé en fonction de vos recommandations qui fonctionne. Merci

require 'net/telnet'

tn = Net :: Telnet :: nouveau ("Host" => "1.1.1.1", "délai d'attente" => 10000, "Demander" =>/[$% #>] \ z/n)

tn.cmd ('String' => 'admin', 'Match' =>/Mot de passe: /) {| c | met c} tn.cmd ('String' => 'pass', 'Match' =>/# /) {| c | met c} tn.cmd ('String' => 'longueur du terminal 0', 'Match' =>/# /) {| c | met c} tn.cmd ('String' => 'sh run', 'Match' =>/# /) {| c | met c} tn.close