Назад | Перейти на главную страницу

Настройка Chef Node: экземпляр Amazon EC2 создается, но загрузка не выполняется

Я пытаюсь использовать Chef и бесплатный сервер Chef от Opscode.

Моя рабочая станция Chef настроена на локальной виртуальной машине под управлением Ubuntu 12.04LTS. Я скачал репозиторий шеф-поваров с GitHub по инструкции.

Я загрузил ключи из Opscode (myorg.pem как организационный ключ и jgodse.pem как личный ключ). У меня также были ключи от Amazon для использования их API EC2 (AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, которые я установил как переменные среды). Я также создал в Amazon ключ для использования с экземпляром (deploy.pem). Все ключи находятся в ~ chef-repo / .chef / и в ~ / .ssh /, что, вероятно, излишне, но я просто хочу, чтобы он работал.

Мне удалось создать экземпляр EC2 с помощью Knight EC2, но Knight-EC2 не смог завершить работу и запустить клиент-шеф-повар, потому что он не смог войти на вновь созданный сервер.

Вот моя сессия.

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: root@ec2-107-21-188-230.compute-1.amazonaws.com
railsdev@localchef:~/Chef/chef-repo$ 

Я смог подключиться к этому экземпляру по ssh, используя

jgodse/Chef/chef-repo> ssh -i ./.chef/deploy.pem ubuntu@ec2-107-21-188-230.compute-1.amazonaws.com

Есть какие-нибудь подсказки относительно того, почему это не аутентифицируется с 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"

Э ... вы пытаетесь использовать ssh как root. EC2 по умолчанию не позволяет этого даже с вашим логином в ключевом файле по умолчанию:

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

Пока ваша тестовая команда использует ubuntu@.

Вы можете "разрешить" root-доступ, изменив файл authorized_keys в /root/.ssh (или добавив ключ самостоятельно).

Попробуйте выполнить команду, как показано ниже:

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]"

Возникла пара проблем.

Сценарий пытался использовать «root», поскольку это идентификатор пользователя по умолчанию. Чтобы исправить это, мне пришлось добавить одну строчку в файл 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]'

и я пошел дальше.