执行 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;
}
}
之后可以考虑并行执行命令
我正在创建一个 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;
}
}
之后可以考虑并行执行命令