在 perl 中连接到远程主机并以 root 用户身份运行 ssh 命令

问题描述 投票:0回答:1

我正在尝试以用户身份连接到远程主机。现在我想运行一些需要 sudo 访问权限的命令。命令是:

export http_proxy=http://xxxx.xx.xx.com:8080
export https_proxy=http://xxxx-xxxx.xx.xx.com:8080
sudo /etc/init.d/filebeat restart
sudo tail -f /var/log/filebeat/filebeat

我尝试使用

执行此操作
my @cmdF = "/etc/init.d/filebeat restart";
print "Restarting filebeat for $webHosts[$i]";
my @cmdF = "/etc/init.d/filebeat restart";
my $outputF = $ssh->capture({stdin_data=>"$pass\n"}, 'sudo', '-Sk', '-p', '', '-', @cmdF);
print "\nCurrent Filebeat Status : $outputF\n\n";

此刻我只执行了一个命令,但最终得到了这个错误:

sudo: /etc/init.d/filebeat restart: command not found

请帮我完成所有命令..

提前谢谢你。

shell perl filebeat cpan
1个回答
1
投票

sudo /etc/init.d/filebeat restart
包含三个参数(包括命令):

  1. sudo
  2. /etc/init.d/filebeat
  3. restart

你改为执行这些:

  1. sudo
  2. -Sk
  3. -p
  4. 空字符串
  5. -
  6. /etc/init.d/filebeat restart

最相关的是你将两个参数合二为一,产生了垃圾。

你需要什么:

my $commands = <<'.';
export http_proxy=http://xxxx.xx.xx.com:8080
export https_proxy=http://xxxx-xxxx.xx.xx.com:8080
sudo /etc/init.d/filebeat restart
sudo tail -f /var/log/filebeat/filebeat
.

$ssh->capture( 'sh', '-c', $commands );
© www.soinside.com 2019 - 2024. All rights reserved.