问题. 以下命令行
knife bootstrap 127.0.0.1 -r 'recipe[chef-client]' -x user -p password --sudo
返回
Bootstrapping Chef on 127.0.0.1
WARNING: Failed to connect to 127.0.0.1 -- Errno::ECONNREFUSED: Connection refused - connect(2)
预期的该命令将会成功,并且之后
knife node list
将返回
[
"127.0.0.1"
]
SSH 服务器在本地主机上运行良好,且按预期工作。ssh [email protected] -p password
答案1
看起来调用的问题在于您使用选项指定了密码-p
,该选项knife bootstrap
用于指定备用 ssh 端口。您想使用-P
(大写 P),这是为 bootstrap 命令指定密码的正确选项。
而且,正如 Justin 所指出的,如果您已经安装了 chef,并且能够运行“knife”命令,那么 bootstrap 在技术上可能不是必需的。您应该能够启动“chef-client”将您的节点注册到服务器(-K
如果尚未安装/在 /etc/chef 中可用,则可能需要带有选项的验证密钥)。一旦注册到您的服务器,您就可以发出knife node run_list add
命令将适当的角色/配方添加到运行列表,然后调用另一个chef-client
命令使其生效。再说一次,bootstrap
所有操作都用一个命令完成,所以这不是一个糟糕的选择。
答案2
并且必须将 IP 和 NODENAME(主机名)添加到 /etc/hosts:
127.0.0.1 NODENAME
然后将 % knife bootstrap 127.0.0.1 -r 'recipe[chef-client]' -x user -p password --sudo 拆分为两个步骤:
步骤1:
% knife bootstrap IP_ADDRESS -x ubuntu -P PASSWORD --sudo
第2步:
% knife ssh name:NODENAME -x ubuntu -P PASSWORD "sudo chef-client"
答案3
如果出现连接被拒绝的情况,则无法打开 SSH 连接,因为:
- 系统上未运行 SSH。
- 防火墙规则阻止了对端口 22 的访问。
- SSH 正在 22 以外的端口上运行。
也就是说,“knife bootstrap”旨在用于使用 Ruby/RubyGems 设置远程系统,安装 Chef 并将其配置为连接到已配置的 chef 服务器(从您的本地 knife 配置)。有关“knife bootstrap”命令的更多信息,请参阅:
- 刀帮助引导程序(在 Chef 0.10+ 中)
- http://wiki.opscode.com/display/chef/Knife+Bootstrap
hostname -f
此外,除非使用 -N NODE_NAME 指定,否则节点名称将是检测到的完全限定域名(通常是 的输出)。
答案4
knife bootstrap 127.0.0.1 -U 用户-N NODE_NAME --sudo --use-sudo-password -y --connection-password 密码
此命令在 localhost 上对我有效。我在https://github.com/chef/chef/issues/9404#issuecomment-597424916。
但正如 William 和 Justin 所说,您可以使用chef-client
它将您的节点注册到服务器。