【问题标题】:How can I run a command on a remote machine with Perl?如何使用 Perl 在远程机器上运行命令?
【发布时间】:2010-04-29 00:24:40
【问题描述】:

我正在使用以下代码连接到远程机器并尝试在远程机器上执行一个简单的命令。

#!/usr/bin/perl
#use strict;
use warnings;
use Net::Telnet;

$telnet = new Net::Telnet ( Timeout=>2, Errmode=>'die');
$telnet->open('172.168.12.58');
$telnet->waitfor('/login:\s*/');
$telnet->print('admin');
$telnet->waitfor('/password:\s*/');
$telnet->print('Blue');

#$telnet->cmd('ver > C:\\log.txt');
$telnet->cmd('mkdir gy');

但是当我执行这个脚本时,它会抛出错误消息

[root@localhost]# perl tt.pl
command timed-out at tt.pl line 12

【问题讨论】:

  • 你有什么理由注释掉use strict;

标签: perl


【解决方案1】:

从您的代码看来,您拥有 *nix。使用 perl 模块Net::SSH::Perl 更简单

示例代码:

#!/usr/bin/perl -w
use strict;
use Net::SSH::Perl
my $cmd = 'command';
my $ssh = Net::SSH::Perl->new("hostname", debug=>0);
$ssh->login("username","password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;

以及 Net::Telnet 的示例代码

use Net::Telnet ();
    my $t = new Net::Telnet (Timeout => 10,
                          Prompt => '/bash\$ $/');
    $t->open("sparky");
    $t->login($username, $passwd);
    my @lines = $t->cmd("who");
    print @lines;

您可以查看Net Telnet Examples 的更多示例

【讨论】:

    【解决方案2】:

    您可能需要提供“提示”构造函数参数 - 请参阅 this thread

    他们给出的例子:

    my $telnet = new Net::Telnet (
        Timeout=>10, 
        Prompt=>'/Bilbo>$/i',   #### <<<==============
        Errmode=>'die', 
        Dump_Log=>'dump.txt', 
        Input_log=>'input.txt', 
        Output_log=>'output.txt', 
    ); 
    

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2016-11-01
      相关资源
      最近更新 更多