我正在创建一个perl脚本,我必须从同一个脚本ssh多个服务器并在所有这些远程服务器上执行相同的命令。 现在我正在使用"如果循环"并从此脚本调用所有其他服务器并对它们执行命令。 我想用这些命令创建一个函数,我需要在这些不同的服务器上执行。
> df <- data.frame(from=c("A",2,3,"F","C","D",6),to=c(1,"A","B","B",4:6))
> df[]<-lapply(df,function(x)ifelse(x%in%one,"one",ifelse(x%in%two,"two",x)))
> df
from to
1 one two
2 two one
3 two one
4 one one
5 one two
6 one two
7 two two
以上命令是否需要为不同的服务器重复语法。 想要使用函数调用。
答案 0 :(得分:1)
从一般编程toutorial开始,然后像:
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;
}
}
之后,您可以考虑在并行执行命令。