使用Net :: SSH :: Perl模块执行多个命令

时间:2012-07-23 19:23:19

标签: perl ssh perl-module

我是这个模块的新手。我尝试了一个示例程序,它工作正常。但是,现在我想如何在这个程序中执行多个命令:

use Net::SSH::Perl;
my $hostname = "<<hostname>>";
my $username = "<<username>>";
my $password = "<<password>>";

my $cmd = 'mkdir script; cd script';

my $ssh = Net::SSH::Perl->new("$hostname", debug=>0);
$ssh->login("$username","$password");

my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;

1 个答案:

答案 0 :(得分:0)

您可以重复拨打cmd

您遇到的问题可能是每个命令都在不同的shell中运行,并且为cdexport的副作用运行的命令变得无用。

作为一种解决方法,您可以使用cd $dir命令为所有命令添加前缀。例如:

my ($stdout1, $stderr1, $exit1) = $ssh->cmd("cd /$dir && $cmd1");
my ($stdout2, $stderr2, $exit2) = $ssh->cmd("cd /$dir && $cmd2");
...

另一个选择是在远程主机上运行shell并与之通信,但这更加困难且容易出错。

最后,Net :: SSH :: Perl已经过时且不受维护,现在,Net::SSH2Net::OpenSSH通常是更好的选择。