Назад | Перейти на главную страницу

Автоматизировать переход по протоколу telnet к маршрутизатору Cisco

Мне нужно автоматизировать подключение 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