我正在尝试使用下面的perl代码来ssh到linux机器并拉出ls -l的输出但它似乎没有工作。 我做错了什么?
#!/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;
}
答案 0 :(得分:1)
Telnet和SSH是两个不同的程序。您不能将telnet客户端用于ssh服务器。