WaltSteadman
MIS
Greetings all,
I am trying to use interactive login and have been using the Net::Telnet command as that is the route I was pointed to by a friend. I am using the script from CPAN for the ssh example. I keep getting a
"problem connecting to host: Permission denied (password)"
which is the result I do get when I log in to the device and put in the password wrong three times. So I am pretty sure it is logging in to the device, just not sure why it is reading the password wrong or if it is really reading it.
I have pasted the code I am using below and just changed the host, username and password. I am trying to log in to a Juniper Netscreen VPN Device.
Any pointers would be appreciated. If there is a better way to do the interactive login and you can point me in that direction that would be great also. Netscreen devices here require Interactive login. examples would rock, but any help is appreciated.
Thanks
Wally
I am trying to use interactive login and have been using the Net::Telnet command as that is the route I was pointed to by a friend. I am using the script from CPAN for the ssh example. I keep getting a
"problem connecting to host: Permission denied (password)"
which is the result I do get when I log in to the device and put in the password wrong three times. So I am pretty sure it is logging in to the device, just not sure why it is reading the password wrong or if it is really reading it.
I have pasted the code I am using below and just changed the host, username and password. I am trying to log in to a Juniper Netscreen VPN Device.
Any pointers would be appreciated. If there is a better way to do the interactive login and you can point me in that direction that would be great also. Netscreen devices here require Interactive login. examples would rock, but any help is appreciated.
Thanks
Wally
Code:
#!/usr/bin/perl -w
use Net::Telnet;
## Main program.
{
my ($pty, $ssh, @lines);
my $host = "myservername";
my $user = "myusername";
my $password = "Mypassword";
my $prompt = '/:~> $/';
## Start ssh program.
$pty = &spawn("ssh", "-l", $user, $host); # spawn() defined below
## Create a Net::Telnet object to perform I/O on ssh's tty.
use Net::Telnet;
$ssh = new Net::Telnet (-fhopen => $pty,
-prompt => $prompt,
-telnetmode => 0,
-cmd_remove_mode => 1,
-output_record_separator => "\r");
## Login to remote host.
$ssh->waitfor(-match => '/password: ?$/i',
-errmode => "return")
or die "problem connecting to host: ", $ssh->lastline;
$ssh->print($password);
$ssh->waitfor(-match => $ssh->prompt,
-errmode => "return")
or die "login failed: ", $ssh->lastline;
## Send command, get and print its output.
@lines = $ssh->cmd("get hostname");
print @lines;
exit;
} # end main program
sub spawn {
my(@cmd) = @_;
my($pid, $pty, $tty, $tty_fd);
## Create a new pseudo terminal.
use IO::Pty ();
$pty = new IO::Pty
or die $!;
## Execute the program in another process.
unless ($pid = fork) { # child process
die "problem spawning program: $!\n" unless defined $pid;
## Disassociate process from existing controlling terminal.
use POSIX ();
POSIX::setsid
or die "setsid failed: $!";
## Associate process with a new controlling terminal.
$tty = $pty->slave;
$tty_fd = $tty->fileno;
close $pty;
## Make stdio use the new controlling terminal.
open STDIN, "<&$tty_fd" or die $!;
open STDOUT, ">&$tty_fd" or die $!;
open STDERR, ">&STDOUT" or die $!;
close $tty;
## Execute requested program.
exec @cmd
or die "problem executing $cmd[0]\n";
} # end child process
$pty;
} # end sub spawn