设置 Chef 节点:Amazon EC2 实例已创建但引导失败

设置 Chef 节点:Amazon EC2 实例已创建但引导失败

我正在尝试使用 Chef 和 Opscode 的免费 Chef 服务器。

我在运行 Ubuntu 12.04LTS 的本地虚拟机上配置了我的 Chef 工作站。我根据说明从 GitHub 下载了 chef-repo。

我从 Opscode 下载了密钥(myorg.pem 作为组织密钥,jgodse.pem 作为个人密钥)。我还从 Amazon 下载了密钥,以使用其 EC2 API(AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY,我将其设置为环境变量)。我还在 Amazon 创建了一个密钥,用于实例(deploy.pem)。所有密钥都在 ~chef-repo/.chef/ 和 ~/.ssh/ 中,这可能有点过头了,但我只是想让它正常工作。

我设法使用 knife ec2 创建了一个 EC2 实例,但是 knife-ec2 无法完成该作业并引导 chef-client,因为它无法登录到新创建的服务器。

这是我的会议。

railsdev@localchef:~/Chef/chef-repo$ knife ec2 server create -r 'recipe[apt]'
Instance ID: i-fa4c1b99
Flavor: m1.small
Image: ami-xxxxxxxx
Region: us-east-1
Availability Zone: us-east-1b
Security Groups: default
Tags: {"Name"=>"i-fa4c1b99"}
SSH Key: deploy

Waiting for instance.....................
Public DNS Name: ec2-107-21-188-230.compute-1.amazonaws.com
Public IP Address: 107.21.188.230
Private DNS Name: ip-10-10-206-167.ec2.internal
Private IP Address: 10.10.206.167

Waiting for sshd...done
Bootstrapping Chef on ec2-107-21-188-230.compute-1.amazonaws.com
Failed to authenticate root - trying password auth
Enter your password: 
ERROR: Net::SSH::AuthenticationFailed: [email protected]
railsdev@localchef:~/Chef/chef-repo$ 

我能够使用 ssh 进入此实例

jgodse/Chef/chef-repo> ssh -i ./.chef/deploy.pem [email protected]

有什么线索可以说明为什么这无法通过 Knife EC2 进行身份验证?

我的 ~chef-repo/.chef/knife.rb 文件如下所示:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "jgodse"
client_key               "#{current_dir}/jgodse.pem"
validation_client_name   "myorg-validator"
validation_key           "#{current_dir}/myorg-validator.pem"
chef_server_url          "https://api.opscode.com/organizations/myorg"
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]

knife[:aws_access_key_id]      = ENV['AWS_ACCESS_KEY_ID']
knife[:aws_secret_access_key]  = ENV['AWS_SECRET_ACCESS_KEY']

# Default flavor of server (m1.small, c1.medium, etc).
knife[:flavor] = "m1.small"

# Default AMI identifier, e.g. ami-12345678
knife[:image] = "ami-xxxxxxxx"

# AWS Region
#knife[:region] = "us-east-1"

# AWS Availability Zone. Must be in the same Region.
knife[:availability_zone] = "us-east-1b"

# A file with EC2 User Data to provision the instance.
#knife[:aws_user_data] = ""

# AWS SSH Keypair.
knife[:aws_ssh_key_id] = "deploy"

答案1

呃...您正在尝试以 root 身份通过 ssh 登录。默认情况下,EC2 不允许这样做,即使您使用密钥文件默认登录:

ERROR: Net::SSH::AuthenticationFailed: root@

虽然您的测试命令使用ubuntu@

您可以通过修改authorized_keys文件/root/.ssh(或自行添加密钥)来“允许”root访问。

答案2

存在一些问题。

该脚本尝试使用“root”,因为它是默认用户 ID。为了解决这个问题,我必须在 knife.rb 文件中添加一行:

knife[:ssh_user]="ubuntu"

第二个问题是 ssh 不知道如何找到密钥(因为它是 deploy.pem)。所以我不得不执行以下操作:

ubuntu> exec ssh-agent /user/bin/bash    #This causes the terminal to disappear
ubuntu> ssh-add /home/jgodse/.ssh/deploy.pem   

完成后,我重新发出命令

knife ec2 server create -r 'recipe[apt]'

我得到了进一步的帮助。

答案3

尝试运行以下命令:

knife ec2 server create --image ami-xxxx -i /root/.ssh/deploy.pem --flavor t1.micro -x root --groups ChefGroup -Z ap-southeast-1a -r "recipe[apt]"

相关内容