|
Posted by solaris.identity on February 9, 2007, 3:33 pm
Please log in for more thread options
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
|
|
Posted by Joe Smith on February 9, 2007, 4:26 pm
Please log in for more thread options
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
|
|
Posted by solaris.identity on February 9, 2007, 8:10 pm
Please log in for more thread options
> solaris.ident...@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
I took this straight out of Net::Telnet web page examples
http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.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
|
| Similar Threads | Posted | | How do you telnet from 1 host to another using Telnet Module | December 21, 2005, 4:15 pm |
| debugging issue with Net::FTP | January 1, 2005, 2:36 pm |
| Possible Issue with HTML::TreeBuilder? | July 5, 2005, 6:49 am |
| libwww-SSL Post Issue | August 2, 2006, 4:04 pm |
| Illegal Immigration, the Non-Issue of the Week........................ | March 30, 2006, 10:52 pm |
| Sybase Stored Procedure issue | June 14, 2006, 12:27 pm |
| ImageMagick and Xitami jpeg/bmp issue | June 28, 2006, 9:40 am |
| net::telnet to ms telnet server | May 19, 2005, 12:28 am |
| CPAN conflict issue - CGI.pm vs ModPerl::Registry | September 25, 2006, 12:42 pm |
| Net::Daemon t/forkm.t issue on Solaris 10 zone? | November 10, 2006, 7:12 pm |
|