2010-08-13 4 views
-1

У меня есть следующий код, который прекрасно подключается к моему маршрутизатору. Проблема в том, что после подключения я пытаюсь передать команду «sh ver», которая никогда не передается маршрутизатору. Спасибо за вашу помощь!Сценарий резервного копирования маршрутизатора

требуют инет/телнет '

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') 

ответ

1

Проблема заключается в том, что вы установили «приглашение» к выражению, которое соответствует Имя: (нюанс: у вас есть обратный слэш там, так что, вероятно, на самом деле соответствует SERNAME :)

Итак, когда вы делаете tn.cmd (pass), он отправляет пароль, а затем ждет имени пользователя: (или SERNAME :).

Измените 'приглашение' на регулярное выражение, соответствующее обычным приглашениям cisco (подсказка, которую вы видите после успешного входа в систему).

+0

Я добавлю, что он, вероятно, хочет использовать waitfor для первоначального запроса на ввод. –

0

Так что это код, который я использовал на основе ваших рекомендаций, которые работают. Благодаря

требуют инет/телнет '

Tn = Net :: Telnet :: новый ("Host" => "1.1.1.1", "Тайм-аут" => 10000, "строка" =>/[$% #>] \ z/n)

tn.cmd ('String' => 'admin', 'Match' =>/Password: /) {| c | puts c} tn.cmd ('String' => 'pass', 'Match' =>/# /) {| c | puts c} tn.cmd ('String' => 'terminal length 0', 'Match' =>/# /) {| c | puts c} tn.cmd ('String' => 'sh run', 'Match' =>/# /) {| c | puts c} tn.close

Смежные вопросы