【问题标题】:perl sudo using Net::Openssh not workingperl sudo 使用 Net::Openssh 不起作用
【发布时间】:2012-09-20 21:49:00
【问题描述】:

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

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

目标系统上的 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";

【问题讨论】:

  • 您是否尝试运行要求您通过 Net::OpenSSH 连接使用 sudo 的命令?如果是这样,您应该修改您的问题标题以更准确地反映您的问题“perl sudo ...”听起来您正在尝试使用 Perl Sudo 模块search.cpan.org/~landman/Sudo-0.21/lib/Sudo.pm
  • 你好 Andrew,我要去结帐 sudo.pm 我会报告发现了什么。如果你有任何使用经验请分享
  • 可能作为 sudo.pm 工作似乎提供了一些远程机制,尽管它自 2007 年以来一直没有更新。与 perl - timtowtdi 一样。无论哪种方式最适合您,我只回答了对我来说最简单且需要最少依赖性的方法。

标签: perl sudo


【解决方案1】:

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

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

这里是PerlDoc for Quote-Like operators - 寻找讨论&lt;&lt;EOF 的区域,因为我经常使用here docs 编写这样的脚本。

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

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

【讨论】:

  • 问题是如何将密码传递给 sudo。一旦 sudo auth 完成运行该命令将不难。你能用 HERE doc 传递密码吗??
  • 我不明白为什么它不会 - 但你自己试试吧。在标量中创建一个“heredoc”,并通过$ssh-&gt;system() 将其传递给您的Net::OpenSSH 连接。如果它不起作用,我已经列出了其他可以解决您的问题的选项 - 例如使用您的 ssh 连接在远程服务器上执行一个 shell 脚本,该脚本可能包含一个 heredoc 来以 sudo 的方式执行事情。我还提到了 Net::OpenSSH 与 expect 一起使用的事实,它通常用于为事物提供密码。
  • 我之前尝试过使用 expect,但也无法正常工作。我也发布了一个问题....
猜你喜欢
  • 2013-03-18
  • 2017-07-25
  • 2013-09-19
  • 2016-08-21
  • 2015-10-20
  • 2015-01-12
  • 2016-09-13
  • 2016-08-19
  • 1970-01-01
相关资源
最近更新 更多