【问题标题】:How to call a function in Perl script after performing SSH?执行 SSH 后如何在 Perl 脚本中调用函数?
【发布时间】:2016-04-19 19:26:34
【问题描述】:

我正在创建一个 perl 脚本,其中我必须从同一个脚本 ssh 多个服务器并在所有这些远程服务器上执行相同的命令。 现在我正在使用“If loop”并从此脚本调用所有其他服务器并对它们执行命令。 我想用这些命令集创建一个函数,我需要在这些不同的服务器上执行。

if($random_number==1){
use Net::SSH::perl
use lib qw("user/share/perl5/");
my $hostname = "10.*.*.*";
my $username = "root";
my $password = "root\@123";
my $cmd1  = "ls /home/ashish/"
my $cmd2 = "netstat -na | grep *.*.*.*;
$ssh->login("$username" , "$password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$smd1" && "$cmd2");
print $stdout;
}

if 语法之后的上述命令需要针对不同的服务器重复。 想使用函数调用。

【问题讨论】:

  • 随机数是干什么用的?
  • 1) 'if' 不是循环 2) 从一些基本的 perl/通用编程教程开始
  • 你好像忘了问问题:-)

标签: linux perl ssh subroutine


【解决方案1】:

从一般的编程教程开始,然后这样做:

use Net::SSH::perl;
use strict;
use warnings;    

my @servers = (
    {
        hostname => 'somehost1',
        username => 'someuser1',
        password => 'somepass1',
        commands => ['somecmd11','somecmd12'],
    },
    {
        hostname => 'somehost2',
        username => 'someuser2',
        password => 'somepass2',
        commands => ['somecmd21','somecmd22'],
    },
# ...
);

do_something_on_remote_servers_one_by_one( @servers );
exit(0);




sub do_something_on_remote_servers_one_by_one { 
    my (@servers) = @_;

    foreach my $server (@servers) {
        my $ssh = Net::SSH::perl->new($server->{hostname});
        $ssh->login($server->{username}, $server->{password});
        my $cmd_string = join(' & ', @{ $server->{commands} } );
        my ($stdout,$stderr,$exit) = $ssh->cmd($cmd_string);
        print $stdout;
    }
}   

之后,你可以考虑并行执行命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多