X-Git-Url: http://git.rot13.org/?p=dell-switch;a=blobdiff_plain;f=dell-switch.pl;h=82debdaedb3074ce69bf4d348cc57e321b2edb5e;hp=c48184f8e26377e19c1d4d1760308327ac422ca6;hb=HEAD;hpb=d72fcd70c44a4bd2e3dbe35027a52f649ffae491 diff --git a/dell-switch.pl b/dell-switch.pl index c48184f..485d29c 100755 --- a/dell-switch.pl +++ b/dell-switch.pl @@ -31,7 +31,17 @@ if ( ! @commands && ! -t STDIN && -p STDIN ) { # we are being piped into } warn "\n## ssh $ip\n"; -my $ssh = Net::OpenSSH->new($ip, user => $login, passwd => $passwd, default_ssh_opts => [-o => "StrictHostKeyChecking=no"]); +my $ssh = Net::OpenSSH->new($ip, user => $login, passwd => $passwd, + ssh_cmd => '/usr/bin/ssh1', # apt-get install openssh-client-ssh1 + master_opts => [ + -o => "StrictHostKeyChecking=no", + -F => '/home/dpavlin/dell-switch/ssh1-config' + ], + default_ssh_opts => [ + -o => "StrictHostKeyChecking=no", + -F => '/home/dpavlin/dell-switch/ssh1-config' + ], +); my ($pty ,$pid) = $ssh->open2pty(); if ( ! $pty ) { warn "ERROR: can't connect to $ip, skipping"; @@ -89,7 +99,8 @@ while() { } elsif ( $buff =~ m/Password:/ ) { send_pty "$passwd\n"; $buff = ''; - } elsif ( $buff =~ m/([\w\-\(\)]+)#$/ ) { + } elsif ( $buff =~ m/[\n\r\b]([\w\-\(\)\/]+)#\s*$/ ) { + # config interface needs / in prompt my $hostname = $1; if ( $buff ) { save_log $ip, $hostname, $command, $buff; @@ -106,10 +117,24 @@ while() { } } elsif ( $buff =~ m/% Unrecognized command/ ) { exit 1; + } elsif ( $buff =~ m/% Invalid input detected at .* marker/ ) { + + # try to rewrite command differences + + if ( $command =~ m/show lldp neighbors/ ) { + unshift @commands_while, 'show lldp remote-device all'; + undef $command; # don't save this command + $buff = ''; + } + + warn "# commands_while = ",dump( \@commands_while ); + } 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{\r\s{18}\r}{} ) { + # strip spaces delete after more prompt } elsif ( $buff =~ s{\e\[0m\s*\r\s+\r}{} ) { # nop } elsif ( $buff =~ m/^[\r\n]+[\w\-]+>$/ ) { @@ -136,4 +161,3 @@ show vlan show running-config show bridge address show interfaces status -