X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=dell-switch.pl;h=e3c3b0d74af7179533c0e6252f26e49288d9c4d3;hb=8e5fcc0e9db472b21d3d21b0882a8c469b2f575d;hp=4d7badbc377abcf556f194343cbf4512ce4fc420;hpb=2af5c4d2c1b480fe028d0832b6ef0493c5fa61cc;p=dell-switch diff --git a/dell-switch.pl b/dell-switch.pl index 4d7badb..e3c3b0d 100755 --- a/dell-switch.pl +++ b/dell-switch.pl @@ -11,16 +11,18 @@ our $login; our $passwd; our $debug = $ENV{DEBUG} || 0; +use lib '.'; require 'config.pl'; #$Net::OpenSSH::debug = ~0; my $ip = shift @ARGV || die "usage: $0 IP command[ command ...]\n"; +$ip = $1 if `host $ip` =~ m/has address (\S+)/; my @commands = @ARGV; @commands = unless @commands; -warn "## $ip\n"; -my $ssh = Net::OpenSSH->new($ip, user => $login, passwd => $passwd); +warn "\n## ssh $ip\n"; +my $ssh = Net::OpenSSH->new($ip, user => $login, passwd => $passwd, default_ssh_opts => [-o => "StrictHostKeyChecking=no"]); my ($pty ,$pid) = $ssh->open2pty(); if ( ! $pty ) { warn "ERROR: can't connect to $ip, skipping"; @@ -31,12 +33,12 @@ my $buff; sub send_pty { my $string = shift; - sleep 0.1; # we really need to wait for slow PowerConnect 5324 + sleep 0.05; # we really need to wait for slow PowerConnect 5324 foreach (split //, $string) { print STDERR "[$_]" if $debug; syswrite $pty, $_; #$pty->flush; - sleep 0.05; + sleep 0.01; sysread $pty, my $echo, 1; print STDERR $echo; @@ -52,6 +54,7 @@ sub save_log { my ($ip, $hostname, $command, $buff) = @_; return unless $command; + return if $ENV{NO_LOG}; my $file = "${ip}_${hostname}_${command}.log"; open my $log, '>', $file; @@ -64,8 +67,9 @@ sub save_log { } my $command; +my @commands_while = ( @commands ); -while(1) { +while() { my $data; my $read = sysread($pty, $data, 1); print STDERR $data; @@ -76,15 +80,13 @@ while(1) { } elsif ( $buff =~ m/Password:/ ) { send_pty "$passwd\n"; $buff = ''; - } elsif ( $buff =~ m/\b([\w\-]+)>$/ ) { - send_pty "enable\n"; - } elsif ( $buff =~ m/([\w\-]+)#$/ ) { + } elsif ( $buff =~ m/([\w\-\(\)]+)#$/ ) { my $hostname = $1; if ( $buff ) { save_log $ip, $hostname, $command, $buff; $buff = ''; } - if ( $command = shift @commands ) { + if ( $command = shift @commands_while ) { $command =~ s/[\n\r]+$//; send_pty "$command\n"; $buff = ''; @@ -95,17 +97,27 @@ while(1) { } } elsif ( $buff =~ m/% Unrecognized command/ ) { exit 1; - } elsif ( $buff =~ s{More: , Quit: q.*One line: }{} ) { - sleep 0.5; + } elsif ( $buff =~ s{More: , Quit: q.*One line: \s*}{} ) { send_pty " "; } elsif ( $buff =~ s{\Q--More-- or (q)uit\E}{} ) { - send_pty " " - } elsif ( $buff =~ s{\e\[0m\r\s+\r}{} ) { + send_pty " "; + } elsif ( $buff =~ s{\e\[0m\s*\r\s+\r}{} ) { + # nop + } elsif ( $buff =~ m/^[\r\n]+[\w\-]+>$/ ) { + send_pty "enable\n"; + } elsif ( $buff =~ m{\QOverwrite file [startup-config] ?[Yes/press any key for no]....\E} ) { + send_pty "y"; + $buff = ''; + } elsif ( $buff =~ s{Management access will be blocked for the duration of the transfer.*Are you sure you want to start\? \(y/n\) }{}s ) { + send_pty 'y'; } } __DATA__ +show system show arp show vlan show running-config show bridge address +show interfaces status +