0

我正在使用 salvas 的 Net::Openssh 模块,但无法弄清楚如何使用 sudo。我尝试了以下方法,但它不起作用......

结果中没有打印任何内容。ls像,这样的单字命令pwd也不会产生任何东西。

目标系统上的 sudo 版本:

$ /usr/local/bin/sudo -V
CU Sudo version 1.5.7p2

$ /usr/local/bin/sudo -h
CU Sudo version 1.5.7p2
usage: /usr/local/bin/sudo -V | -h | -l | -v | -k | -H | [-b] [-p prompt] [-u username/#uid] -s | <command>

由于 CU sudo 一次不允许超过 1 个选项,因此我在提供命令之前提供 -k 。

请注意,这个 sudo 版本没有 -S 开关来使用标准输入传递密码。所以它需要来自终端的密码。你能帮忙吗?谢谢。

$ssh->system("$sudo_path -k");
my @output = $ssh->capture({tty => 1,
              stdin_data => "$PASS"},
              $sudo_path,
              "-p",'', "$cmd");
print "  result=@output \n";

或者

$ssh->system("$sudo_path -k");
my @output = $ssh->capture({stdin_data => "$PASS"},
              $sudo_path,
              "-p",'', "$cmd");
print "  result=@output \n";
4

1 回答 1

0

如果您在问题中解释了更多您要完成的工作,那将会更有帮助,但我假设您正在尝试使用 perl 中的 Net::OpenSSH 模块通过 ssh 运行需要 sudo 的命令。

如果是这种情况,您应该考虑尝试使用“heredoc”来编写一系列命令的脚本。

这是Quote-Like 运算符的 PerlDoc - 寻找<<EOF我经常在这里使用的文档来讨论这样的事情的区域。

如果由于某种原因在 Net::OpenSSH 命令中使用heredoc 不起作用 - Net::OpenSSH 也可以与 Expect 一起使用,如此所述。

如果由于某种原因对您不起作用,您始终可以创建一个 shell 脚本,通过远程系统上的 heredoc 使用 sudo 运行命令,然后通过您的 Net::OpenSSH 连接执行该脚本。

于 2012-09-30T03:37:17.977 回答