在Net :: OpenSSH

时间:2017-08-31 15:35:23

标签: regex perl server

我是Perl编程的新手,目前正在尝试在我的代码中使用Net :: OpenSSH模块,我的新代码如下所示,任务是在远程服务器中运行多个命令,

代码如下::

---
---
foreach $s (@servers) {
my $ssh = Net::OpenSSH->new("$username\@$s", timeout=>30);
$ssh->error and die "Unable to connect: " . $ssh->error;
print "Connected to $s\n";

my $fh = $ssh->capture("df -k /home/ | tail -1") or die "Unable to run command\n";
my @df_arr = split(/\s+/, $fh);
print "$s:  Disk space /home/ = $df_arr[3] \n";

my $fh1 = $ssh->capture("svmon -G -O unit=GB | grep memory") or die "Unable to run command\n";
my @sv_arr = split(/\s+/, $fh1);
print "$s:  Free memory = $sv_arr[3] \n\n";

close $fh;
undef $ssh;
}
----
----

这段代码不太好,因为我打算让它更简化,尽量减少一行。

我是否可以使用任何技术或方法来简化此代码?

1 个答案:

答案 0 :(得分:0)

我们以这种方式实现它的方式:

  1. sub ssh_connect($ username,$ password) $ ssh = ssh_connect($ username,$ password)
  2. sub ssh_execute($ ssh,$ command_str)
  3. 原始代码中有太多重复的代码,也许您可​​以将它们放入子程序并重复使用。