Using Net::Telnet to ssh into linux

2019-08-10 01:30发布

问题:

I am trying to use below perl code to ssh into linux machine and pull output of ls -l but it doesnt seem to be working. What am i doing wrong?

#!/usr/bin/perl

use warnings;
use strict;

use Net::Telnet;
use IO::Pty;
use POSIX 'setsid';
use Getopt::Long;

use constant PROMPT => '/[a-z#>]/';

my $host = "192.168.1.121";
my $user = "root";

my $ssh = do_cmd( 'ssh', "-l$user", $host );

my $shell = Net::Telnet->new( Fhopen => $ssh );

$shell->binmode(1);
$shell->cmd( String => 'test', Prompt => '/[a-z]/' );
$shell->waitfor(PROMPT);

my @lines = $shell->cmd( String => 'ls -l', Prompt => '/[a-z]/' );

print @lines;
print "\n";

sub do_cmd {
    my ( $cmd, @args ) = @_;

    my $pty = IO::Pty->new;
    defined( my $child = fork );
    return $pty if $child;
    setsid();

    my $tty = $pty->slave;
    close $pty;
    STDIN->fdopen( $tty, "<" );
    STDOUT->fdopen( $tty, ">" );
    STDERR->fdopen( $tty, ">" );
    close $tty;

    $| = 1;
    exec $cmd, @args;
}

回答1:

Telnet and SSH are two different programs. You can't use telnet client for ssh server.



标签: linux perl ssh