Мне нужно автоматизировать подключение telnet к маршрутизатору Cisco и получить результат «показать версию». Проблема в том, что мне нужно сначала установить telnet на A, оттуда telnet на B, а затем иметь возможность подключиться только к маршрутизатору 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
это будет работать
(
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 Сеть :: 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 для любых автоматизированных скриптов.
Можешь попробовать 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