Home > Archive > PERL Modules > February 2007 > net::telnet pm issue
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
net::telnet pm issue
|
|
| solaris.identity@gmail.com 2007-02-09, 6:59 pm |
| Hi,
Not matter what RE I try in 'waitfor' function does not match the
"Password" prompt.
Here is the piece of code, from your example that I used
## 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");
$ssh->dump_log('passwd.log');
## Login to remote host.
$ssh->waitfor(-match => '/.*password:.*/i',
-errmode => "return")
or die "problem connecting to host: ", $ssh->lastline
when I do a ssh from command line the prompt ends with
Password:
here are the last few line of dump_log
< 0x00000: 50 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65
Permission denie
< 0x00010: 64 20 28 67 73 73 61 70 69 2d 6b 65 79 65 78 2c d
(gssapi-keyex.
< 0x00020: 67 73 73 61 70 69 2d 77 69 74 68 2d 6d 69 63 2c gssapi-
with-mic.
< 0x00030: 70 75 62 6c 69 63 6b 65 79 2c 6b 65 79 62 6f 61
publickey.keyboa
< 0x00040: 72 64 2d 69 6e 74 65 72 61 63 74 69 76 65 29 2e rd-
interactive).
< 0x00000: 0d 0d 0a ...
Thanks
| |
| Joe Smith 2007-02-09, 6:59 pm |
| solaris.identity@gmail.com wrote:
> Not matter what RE I try in 'waitfor' function does not match the
> "Password" prompt.
You're assuming that it comes over the socket.
> $ssh = new Net::Telnet (-fhopen => $pty,
>
> when I do a ssh from command line the prompt ends with
>
> Password:
With telnet, the "Password:" prompt comes over the socket from the telnetd server.
With ssh, the "Password:" prompt comes from the ssh client and is read
from /dev/tty, not STDIN.
What made you choose Net::Telnet versus Net::SSH ?
-Joe
| |
| solaris.identity@gmail.com 2007-02-09, 9:58 pm |
| On Feb 9, 4:26 pm, Joe Smith <j...@inwap.com> wrote:
> solaris.ident...@gmail.com wrote:
>
> You're assuming that it comes over the socket.
>
>
>
>
> With telnet, the "Password:" prompt comes over the socket from the telnetd server.
> With ssh, the "Password:" prompt comes from the ssh client and is read
> from /dev/tty, not STDIN.
>
> What made you choose Net::Telnet versus Net::SSH ?
>
> -Joe
I took this straight out of Net::Telnet web page examples
http://search.cpan.org/~jrogers/Net...elnet.pm#AUTHOR
there was no particular reason for using Net::Telnet. I found what I
wanted to do with an example .
here it is
## Main program.
{
my ($pty, $ssh, @lines);
my $host = "changeme";
my $user = "changeme";
my $password = "changeme";
my $prompt = '/changeme:~> $/';
## 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("who");
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
|
|
|
|
|