2012-09-29 66 views
0

我使用salvas'Net :: Openssh模块,但无法计算如何使用sudo。我尝试了以下方法,但它不起作用...perl sudo使用Net :: Openssh不起作用

结果中没有任何结果。像ls,pwd这样的单字命令也没有产生任何东西。目标系统上

版本须藤的:

$ /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须藤不允许在同一时间多于1个选择,我供给命令之前供给-k。

请注意,这个sudo版本没有-S开关来使用stdin传递密码。所以它期望来自终端的密码。你可以帮助更多。谢谢。

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

OR

$ssh->system("$sudo_path -k"); 
my @output = $ssh->capture({stdin_data => "$PASS"}, 
       $sudo_path, 
       "-p",'', "$cmd"); 
print " [email protected] \n"; 
+0

您是否试图运行一个命令,要求您通过Net :: OpenSSH连接使用sudo?如果是这样,你应该修改你的问题标题,以更准确地反映你的问题'perl sudo ...'听起来像你正在尝试使用Perl Sudo模块http://search.cpan.org/~landman/Sudo-0.21 /lib/Sudo.pm – AndrewPK

+0

你好安德鲁,我要结帐sudo.pm我会报告什么发现。如果你有任何使用经验pl分享 – rajeev

+0

,可能工作sudo.pm似乎提供了一些远程机制,但它从2007年以来一直没有更新。一如既往与perl - timtowtdi。无论最适合你的是什么,我只是回答了对我而言最简单的东西,并且要求的依赖性最小。 – AndrewPK

回答

0

这将是更有益的,如果你解释更多的什么你试图在你的问题来完成,但我假设你想运行需要一个命令sudo通过ssh使用perl中的Net :: OpenSSH模块。

如果是这样的话,您应该考虑尝试使用'heredoc'来编写一系列命令。

这是PerlDoc for Quote-Like operators - 寻找该地区在谈论<<EOF,因为我经常使用here docs脚本这样的事情。

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

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

+0

问题是如何将密码传递给sudo。一旦sudo auth完成运行命令并不困难。你可以用HERE文件传递密码吗? – rajeev

+0

我不明白为什么它不会 - 但请自己尝试。在标量中创建一个'heredoc',并通过'''ssh-> system()''将它传递给你的Net :: OpenSSH连接。 如果它不起作用,我列出了可以解决您的问题的其他选项 - 例如使用您的ssh连接在远程服务器上执行可能包含heredoc以执行sudo操作的shell脚本。我还提到了Net :: OpenSSH与预期结合的事实,它经常被用来为事物提供密码。 – AndrewPK

+0

我已经尝试使用期望更早,这也不能正常工作。我也发布了一个问题也.... – rajeev