A faca não pode ssh no servidor recém-instanciado do EC2

3

Acabei de criar um novo ambiente de Chef, pois estou expandindo meu conhecimento sobre o Chef. Eu tenho um par de chaves configurado no EC2, eu tenho minha configuração de faca. Quando eu tento gerar um servidor, o nó é criado, mas o Knife não pode ssh nele.

Aqui está o meu knife.rb (que está fora do repositório):

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"

Este é o meu comando de faca:

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

Eu também tentei especificando o pem diretamente:

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

Esta é uma instância do HVM dentro de um grupo VPC.

O que eu tentei e verifiquei ...

  1. Sim, o pem tem as permissões corretas (400).
  2. Sim, o grupo de segurança do EC2 ("padrão") é acessível para o mundo na porta 22.
  3. Sim, posso ssh diretamente usando a tecla knife.pem no comando linha.
  4. Sim, eu pesquisei isso de forma exaustiva e li três diferentes tutoriais. Parece que fiz tudo corretamente.

Há mais alguma coisa que esteja faltando?

No modo detalhado, é isso que estou vendo ...

Waiting for sshd
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
.DEBUG: ssh timed out: 172.nnn.nnn.nnn
    
por Ian Atkin 04.11.2014 / 17:27

4 respostas

2

Eu me deparei com esse problema exato quando eu estava configurando o chef pela primeira vez no EC2. Aqui está o comando que usamos para iniciar instâncias do EC2 com knife com êxito:

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 [email protected] \ #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

Observe que é uma prática recomendada usar um Host Bastião para se conectar às suas instâncias, em vez de se conectar diretamente a cada instância do EC2. Além disso, para servidores voltados para o público, usamos uma linha como essa para atribuir explicitamente o endereço IP elástico:

--associate-eip 54.186.***.*** 
    
por 04.11.2014 / 23:45
2

Só queria adicionar o que funcionou para nós sem um host de bastiões, já que foi preciso muita experiência:

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      

em que o primeiro parâmetro é o nome da instância e o segundo parâmetro é o IP elástico público.

Felicidades!

    
por 23.09.2015 / 20:11
1

Bem, claro, assim que me afastei do computador, percebi qual era o problema ...

knife está tentando usar o ssh no IP privado . D'oh!

Só posso supor que --associate-public-ip conserte isso. Estou longe do computador e testarei mais tarde. Sinta-se à vontade para confirmar / negar / oferecer conselhos.

    
por 04.11.2014 / 18:09
0

Como estou me conectando por IP público e isso --server-connect-attribute public_ip_address funciona para mim.

    
por 04.08.2016 / 15:35