gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:23 24 4
gpt4 key购买 nike

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

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

关于linux - 执行 SSH 后如何在 Perl 脚本中调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com