[英]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
任何工具,也可以被其他任何人使用 ,这意味着sudoers
的requiretty
指令实际上是无用的。 因此,您最好将其删除,省去解决它的麻烦。
话虽如此,以下是解决此问题的一些方法:
您可以不使用密码ssh
到localhost
吗? 您可以只使用ssh -tt localhost sudo somecomand ...
您可以使用expect
工具,该工具旨在控制面向终端的程序。 类似于expect -c "spawn sudo somecommand; interact"
。
您可以使用screen
,例如screen sudo somecommand
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.