繁体   English   中英

在Chef资源块中运行sudo命令

[英]Run sudo commands in Chef resource block

为简化起见,请考虑在食谱(烹饪书测试)食谱中遵循以下步骤。

 79: bash 'Running sudo test sleep command' do
 80:   user 'root'
 81:   cwd '/tmp'
 82:   code <<-EOH
 83:   sudo sleep 1000
 84:   EOH
 85: end

作为运行

“厨师客户-o食谱测试”

输出:

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20150813-3835-3kj758" ----
STDOUT:
STDERR: sudo: sorry, you must have a tty to run sudo
---- End output of "bash"  "/tmp/chef-script20150813-3835-3kj758" ----
Ran "bash"  "/tmp/chef-script20150813-3835-3kj758" returned 1

我添加了“ sudo sleep”只是为了举例说明用例。 在实际情况下,我们在资源块上方运行脚本,并且这些脚本具有sudo命令。

经过一些调试后,发现“ bash”和“ execute”资源块都没有分配tty来在其中运行命令。

请分享您的想法。

这是东西:

您可以在Chef中使用的,用于使用已分配的tty运行sudo任何工具,也可以被其他任何人使用 ,这意味着sudoersrequiretty指令实际上是无用的。 因此,您最好将其删除,省去解决它的麻烦。

话虽如此,以下是解决此问题的一些方法:

  1. 您可以不使用密码sshlocalhost吗? 您可以只使用ssh -tt localhost sudo somecomand ...

  2. 您可以使用expect工具,该工具旨在控制面向终端的程序。 类似于expect -c "spawn sudo somecommand; interact"

  3. 您可以使用screen ,例如screen sudo somecommand

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM