Automatize o salto pelo telnet do salto ao roteador Cisco

1

Eu preciso automatizar o telnet para um roteador Cisco e obter um resultado "show version". O problema é que eu preciso primeiro telnet para A, de lá telnet para B e, em seguida, só será capaz de telnet para o roteador Cisco.

Eu tentei abaixo, mas não funcionou.

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
    
por zaidwaqi 14.12.2011 / 14:42

3 respostas

0

Você pode tentar TCL / Esperar . É muito útil nessas situações. Aqui segue um exemplo de script (você provavelmente precisará ajustá-lo um pouco):

#!/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
    
por 16.12.2011 / 21:56
1

isso funcionará

(
  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
    
por 14.12.2011 / 14:53
0

A biblioteca Perl A Net :: Telnet :: Cisco é ótima para lidar com esse tipo de scripts.

Você só precisa se preocupar com os comandos e não com a comunicação telnet com o roteador.

Exemplo simples:

#!/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

O Netcat é uma ótima ferramenta, mas a facilidade de uso de tal biblioteca é tal que eu não uso mais o netcat para qualquer script automatizado.

    
por 14.12.2011 / 15:09