1

如果用户在服务器上还没有密钥,我想运行 ssh-copy-id ,所以我在执行块中有一个 not_if 指令。我已经验证 not_if 命令返回 0,但执行块仍然运行。

execute "add ssh key to #{shortname}" do
  not_if cmd # proceed only if server doesn't have this key
  command "echo 'If prompted for password it is already in your clipboard and you can just paste it in and hit enter'; ssh-copy-id deploy@#{hostname}"
  cmd = "ssh -o 'BatchMode yes' deploy@#{hostname} echo 'test'"
  puts cmd
end

 

drostie:chef-ops (ssh_copy_id)$ ssh -o 'BatchMode yes' deploy@jenkins01.c45477.blueboxgrid.com echo 'test'
test
drostie:chef-ops (ssh_copy_id)$ echo $?
0

有任何想法吗?

4

2 回答 2

1

尝试在调试中运行它。它将为您提供更多关于为什么它认为应该在每次运行时执行的信息。

chef-client -l debug
于 2012-11-23T17:33:19.177 回答
0

我猜您的 not_if 命令已在您的主机上成功运行,但内部结果是错误代码。

也就是说,ssh 运行正常,能够连接,运行你的一个 liner,(有错误),然后 ssh 成功退出,所以块运行。

我会支持@jtimberman 的建议(我听说他对 Chef 了解一两件事 :))并旨在根据上下文通过数据包、角色或环境来管理 ssh 密钥。

于 2012-11-23T13:35:11.757 回答