2013-10-25 3 views
0

스위치에 텔넷으로 펄 코드를 작성한 다음 명령을 실행하려고합니다. 다음은 코드Perl 스크립트가 내 스위치에 telnet으로 연결할 수 없습니다.

my $device = "1.2.3.4"; 

my $session = Net::Telnet->new(Host => "$device", 
Input_log => "switchevi.log", 
    ); 
$session->login('', 'intosh123'); 

# Execute a command 
my @output = $session->cmd('show run'); 
print "@output\n"; 
$session->close; 

스위치는 사용자 이름이없는 것입니다. 그래서 로그인하면 암호 프롬프트가 나타납니다. 나는이 스크립트를 실행하면, 그것은 나에게

$session->login('', 'intosh123'); 

나에게 무슨 일이 일어나고 있는지 알려 주시기 바랍니다이 줄을입니다

timed-out waiting for login prompt at switch.pl line 12 

같은 오류를 제공

. 로그인 방법에 대한 CPAN 문서에서

답변

0

:

이 방법은 암호 프롬프트 기다리고 $ 암호로 응답 한 후, 로그인 프롬프트 기다리고 $ 사용자 이름으로 응답하여 표준 로그인을 수행하고, 다음 명령을 기다리는 중 인터프리터 프롬프트. 원격 쪽 에 의해 전송 된 프롬프트 중 하나가 예상과 일치하지 않으면 시간 종료 이 해제되어 있지 않으면이 방법이 시간 초과됩니다.
...
print() 및 waitfor()의 조합을 원하는 방식대로 수행하지 않을 때이 방법 대신 으로 사용하는 것이 좋습니다. 원격 호스트에서 사용자 이름을 묻지 않습니다.

그래서 $session->login('', 'intosh123');의, insteed를 이런 식으로 뭔가를 시도 :

또한
$t->waitfor('/password: ?$/i'); #here goes regex to match your password propmt 
$t->print($passwd); 

적절한 기본 프롬프트 정규식 설정하는 것을 잊지 마세요 :

my $t = Net::Telnet->new(Timeout => 10, 
         Prompt => '/your regex goes here/'); 

을 그리고 디버그 옵션을 사용하여 뭔가 잘못되면