Я только что создал новую среду Chef, так как в настоящее время расширяю свои знания о Chef. У меня настроена пара ключей на EC2, настроена конфигурация ножа. Когда я пытаюсь создать сервер, узел создается, но Knife не может подключиться к нему по ssh.
Вот мой knife.rb
(который находится за пределами репо):
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name "mynode"
client_key "/Users/me/.chef/my.pem"
validation_client_name "my-validator"
validation_key "/Users/me/.chef/my-validator.pem"
chef_server_url "https://api.opscode.com/organizations/myorg"
cache_type 'BasicFile'
cache_options( :path => "/Users/me/.chef/checksums" )
cookbook_path ["/Users/me/git/chef/cookbooks"]
knife[:aws_access_key_id] = "yadayadyada"
knife[:aws_secret_access_key] = "blahblahblah"
knife[:identity_file] = "/Users/me/.ssh/knife.pem"
knife[:aws_ssh_key_id] = "knife"
Вот моя команда ножа:
knife ec2 server create -r "role[whatever]" -I ami-09470539 --subnet subnet-03e44866 -f t2.micro --ssh-user ubuntu --region us-west-2 -Z us-west-2a
Я тоже попробовал, указав pem
напрямую:
knife ec2 server create -r "role[whatever]" -I ami-09470539 --subnet subnet-03e44866 -f t2.micro -S knife -i ~/.ssh/knife.pem --ssh-user ubuntu --region us-west-2 -Z us-west-2a
Это экземпляр HVM внутри группы VPC.
Что пробовал и проверял ...
pem
имеет необходимые разрешения (400).knife.pem
ключ в командной строке.Что еще мне не хватает?
В подробном режиме это то, что я вижу ...
Waiting for sshd
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
Просто хотел добавить то, что у нас сработало без хозяин бастиона, так как потребовалось много экспериментов:
knife ec2 server create --image ami-xxxxx \
--flavor t2.medium \
--run-list 'recipe[recipe-name]' \
--security-group-id sg-xxxxx \
--region us-east-1 \
--node-name $1 -T Name=$1 \
--subnet subnet-xxxxx \
--ssh-user ubuntu \
--ssh-key key_name \
--identity-file "~/.ssh/key_file_name" \
--server-connect-attribute dns_name \
--associate-eip $2 \
--associate-public-ip \
--no-host-key-verify
где первый параметр - это имя экземпляра, а второй параметр - общедоступный эластичный IP-адрес.
Ура!
Я столкнулся с этой проблемой, когда впервые настраивал chef на EC2. Вот команда, которую мы используем для запуска экземпляров EC2 с knife
успешно:
knife ec2 server create \
--flavor m3.medium \
--image ami-****** \
--iam-profile "iam-app" \
--ebs-size 30 \
--security-group-ids sg-**** \
--subnet subnet-6de**** \
--ssh-key my-key-name \
--ssh-user ubuntu \
--ssh-port 22 \
--identity-file "/local/path/to/ssh/key/for/this/instance" \
--ssh-gateway ubuntu@our.bastion.host \ #remove this line if you're not connecting through a bastion host
--server-connect-attribute private_ip_address \ # Because we connect through a bastion host we want to explicitly connect to the the private IP address. You may want to set this to the public IP address. I believe these are fog attributes.
--node-name "test-play-1" \
--tags Name="test-play-1",Environment="Test" \
--run-list "role[app]" \
--environment test
Обратите внимание, что лучше всего использовать Бастион Хост для подключения к вашим экземплярам вместо прямого подключения к каждому экземпляру EC2. Кроме того, для общедоступных серверов мы используем такую строку для явного назначения эластичного IP-адреса:
--associate-eip 54.186.***.***
Ну конечно, как только я отошел от компьютера, я понял, в чем проблема ...
knife
пытается использовать ssh частный IP. Ооо!
Я могу только предположить, что --associate-public-ip
исправлю это. Я вдали от компьютера, буду тестировать позже. Не стесняйтесь подтверждать / опровергать / предлагать совет.
Поскольку я подключаюсь через общедоступный IP-адрес, и это --server-connect-attribute public_ip_address
работает для меня.