通过跳telnet到Cisco路由器自动跳

我需要将telnet自动化到Cisco路由器,并获得“显示版本”结果。 问题是,我需要先telnet到A,从telnet到B,然后才能telnet到Cisco路由器。

我已经尝试了下面,但没有工作。

root@linux:~#cat command myName myPassword telnet 2.2.2.2 myName2 myPassword2 telnet 3.3.3.3 cisco ciscoPass show version root@linux:~#nc 1.1.1.1 23 -i 1 < command 

你可以试试TCL /期待 。 这种情况非常方便。 下面是一个示例脚本(您可能需要稍微调整一下):

 #!/usr/bin/expect -- if {$argc != 1} { puts "Wrong parameters." puts "Usage: $argv0 <ip address router 1> <ip address router 2>" exit 1 } # Telnet to router 1 spawn telnet [lindex $argv 0] expect { "Username:" {send "myuser\r"} } expect { "assword:" { send "mypasswd" send "\r" } } expect "\>" # Telnet on router 2 # Telnet to router 1 send "telnet [lindex $argv 1]" expect { "Username:" {send "myuser\r"} } expect { "assword:" { send "mypasswd" send "\r" } } expect "\>" send "sh ver\r" expect "\>" # Quiting router 2 send "quit\r" expect "\>" # Quiting router 1 send "quit\r" expect "Connection closed by foreign host." wait exit 0 

这将工作

 ( sleep 1 echo user ; sleep 1 echo pass ; sleep 1 echo telnet router2 sleep 1 echo user ; sleep 1 echo pass ; sleep 1 echo telnet router3 sleep 1 echo user ; sleep 1 echo pass ; sleep 1 echo sh ver ; sleep 1 ) | telnet router1 

Perl库Net :: Telnet :: Cisco非常适合处理这种脚本。

你只需要担心命令而不是与路由器的telnet通信。

简单的例子:

 #!/usr/bin/perl -w use Net::Telnet::Cisco; if ($#ARGV == -1) { print "Usage : $0 <ip address>\n"; } else { my $host = $ARGV[0]; my $session = Net::Telnet::Cisco->new(Host => $host); $session->login('username', 'password'); my @uptime = $session->cmd('sh ver | i uptime'); print @uptime; $session->close; } $ ./uptime_cisco.pl router.mydomain router uptime is 3 weeks, 1 day, 16 hours, 55 minutes 

Netcat是一个很好的工具,但是这样一个库的易用性使得我不再为任何自动脚本使用netcat。