警告:无法连接到 ip-xxx-xx-xx-xx

WARNING: Failed to connect to ip-xxx-xx-xx-xx

错误:致命:找到 # 个节点,但没有建立连接所需的属性。尝试设置另一个属性以使用 --attribute.

打开连接

我从尝试 运行 使用 chef knife 命令开始的问题。目的是在角色的任何服务器部分上使用命令 运行,如您所见。

所以,当我 运行 命令时,我得到以下内容

knife ssh "role:servers" "touch /home/ubuntu/file.txt"

WARNING: Failed to connect to ip-172-31-8-x.us-west-2.compute.internal -- SocketError: getaddrinfo: nodename nor servname provided, or not known
WARNING: Failed to connect to ip-172-31-94-xb.us-west-2.compute.internal -- SocketError: getaddrinfo: nodename nor servname provided, or not known
WARNING: Failed to connect to ip-172-31-99-x.us-west-2.compute.internal -- SocketError: getaddrinfo: nodename nor servname provided, or not known

当我尝试新属性时

knife ssh "role:web" "touch /home/ubuntu/file.txt" -x ubuntu -a hostname

FATAL: 6 nodes found, but does not have the required attribute to establish the 
connection. Try setting another attribute to open the connection using --attribute.

我尝试了不同的属性,但没有成功

knife ssh "role:servers" "touch /home/ubuntu/file.txt" -a ec2.public_hostname
knife ssh "role:servers" "touch /home/ubuntu/file.txt" -a public_hostname


knife ssh "role:servers" "touch /home/ubuntu/testfile.txt" --attribute 54.68.122.109 -i /Users/useraccount/.ssh/mykey.pem -x ubuntu

FATAL: 2 nodes found, but does not have the required attribute to establish the connection. Try setting another attribute to open the connection using --attribute.

显然我遗漏了一些东西。

我应该注意,我可以通过 ssh 进入服务器,但不能使用 ip-172-31-x-x.us-west-2.compute.internal 厨师客户端在配置时检测到,而是 AWS Public IP。

这会影响我正确地运行上述命令吗?

Chef 服务器将节点数据列为

FQDN: ip-172-31-xx-xx.us-west-2.compute.internal

IP 地址: 172.31.xx.xx

像这样匹配 AWS 设置,

私有 DNS :ip-172-31-xx-xx.us-west-2.compute.internal

私有 IP : 172.31.xx.xx

但是,AWS sshing 到实例的信息是

Public DNS : ec2-54-200-xx-xxx.us-west-2.compute.amazonaws.com Public IP : 54.200.xx.xxx

这是 AWS Public DNS 数据,我可以使用它正确地通过 ssh 连接到服务器(非刀)。

如果问题可能出在 chef-client 向 chef 服务器提供节点数据的方式,是否可以更正它以便 chef 服务器反映节点 aws public ip 数据?

除非您的工作站位于 AWS VPN 上,或者实际上 运行 在您的 VPC 内,否则您需要使用 -a public_ip_address

如果这是一个 VPC 实例,可能由于 ohai 的某些问题,您没有设置该属性。在这种情况下,请确保为 ohai 设置 ec2 提示。最简单的方法是在 bootstrap 节点时使用 --hint ec2 标志。

最后,如果此节点没有 public IP 地址,因为许多节点不在 VPC 中,那么您将需要使用代理节点来访问它。 --ssh-gateway 标志用于此目的,需要指向 VPC 的 public 子网中的节点。