aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rwxr-xr-xinclude/nms.pm32
1 files changed, 31 insertions, 1 deletions
diff --git a/include/nms.pm b/include/nms.pm
index 8926648..e334679 100755
--- a/include/nms.pm
+++ b/include/nms.pm
@@ -2,6 +2,7 @@
use strict;
use warnings;
use DBI;
+use Net::OpenSSH;
use Net::Telnet;
use Data::Dumper;
use FixedSNMP;
@@ -9,7 +10,7 @@ use FileHandle;
package nms;
use base 'Exporter';
-our @EXPORT = qw(switch_disconnect switch_connect switch_exec switch_timeout db_connect);
+our @EXPORT = qw(switch_disconnect switch_connect_ssh switch_connect switch_exec switch_timeout db_connect);
BEGIN {
require "config.pm";
@@ -42,6 +43,35 @@ sub db_connect {
return $dbh;
}
+sub switch_connect_ssh($) {
+ my ($ip) = @_;
+ my $ssh = Net::OpenSSH->new($ip,
+ user => $nms::config::tacacs_user,
+ password => $nms::config::tacacs_pass);
+ my ($pty, $pid) = $ssh->open2pty({stderr_to_stdout => 1})
+ or die "unable to start remote shell: " . $ssh->error;
+
+ my $dumplog = FileHandle->new;
+ $dumplog->open(">>/tmp/dumplog-queue") or die "/tmp/dumplog-queue: $!";
+ #$dumplog->print("\n\nConnecting to " . $ip . "\n\n");
+
+ my $inputlog = FileHandle->new;
+ $inputlog->open(">>/tmp/inputlog-queue") or die "/tmp/inputlog-queue: $!";
+ #$inputlog->print("\n\nConnecting to " . $ip . "\n\n");
+
+ my $telnet = Net::Telnet->new(-fhopen => $pty,
+ -dump_log => $dumplog,
+ -input_log => $inputlog,
+ -prompt => '/.*\@e\d\d-\d> /',
+ -telnetmode => 0,
+ -cmd_remove_mode => 1,
+ -output_record_separator => "\r");
+ $telnet->waitfor(-match => $telnet->prompt,
+ -errmode => "return")
+ or die "login failed: " . $telnet->lastline;
+ return { telnet => $telnet, ssh => $ssh, pid => $pid, pty => $pty };
+}
+
sub switch_connect($) {
my ($ip) = @_;