执行 SSH 后如何在 Perl 脚本中调用函数?

How to call a function in Perl script after performing SSH?

我正在创建一个 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;
}

如果语法需要针对不同的服务器重复执行上述命令。 想使用函数调用。

从一般编程教程开始,然后按照以下方式进行:

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;
    }
}   

之后可以考虑并行执行命令