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

时间:2016-04-19 11:01:59

标签: linux perl ssh subroutine

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

以上命令是否需要为不同的服务器重复语法。 想要使用函数调用。

1 个答案:

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

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