我是这个模块的新手。我尝试了一个示例程序,它工作正常。但是,现在我想如何在这个程序中执行多个命令:
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;
答案 0 :(得分:0)
您可以重复拨打cmd
。
您遇到的问题可能是每个命令都在不同的shell中运行,并且为cd
或export
的副作用运行的命令变得无用。
作为一种解决方法,您可以使用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::SSH2或Net::OpenSSH通常是更好的选择。