Como configurar chaves de host SSH no modelo cloudformation?

1

Estou tentando configurar um EC2 com chaves de host SSH conhecidas na inicialização usando cloud-init em um modelo de cloudformation. Mas agora eu não posso SSH no servidor. É complicado depurar: -)

Aqui está a parte userdata do meu fragmento EC2 do meu modelo:

    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
      "#cloud-config", "\n",
      "ssh_keys:", "\n",
      "- rsa_private: |", "\n",
      "    -----BEGIN RSA PRIVATE KEY-----", "\n",
      "    MIIEowCBAAKCAQF71D8K9C/+K0a2fO+S9s441kSI44lF5ml++ewD+Mp115x9", "\n",
      "    /XwwTlvqxCIpxdzpzq4xXEqH48StHyYIjAOPxoS1/QG0Ti6OqU893PpukLdmV", "\n",
      "    kLZKn2ph4fTT2aMl...", "\n",
      "    -----END RSA PRIVATE KEY-----", "\n",
      "rsa_public: ssh-rsa AAAAB...", "\n",

Eu também tenho entradas para (ec) dsa_public / private conforme os documentos.

Existe alguma estranheza com o cloudinit, onde eu tenho que especificar também o ssh_authorized_keys? Presumo que a chave pública do meu par de chaves não esteja sendo empurrada para o EC2 pela Amazon ...

    
por Dave 13.04.2015 / 16:15

1 resposta

4

O UserData da sua pergunta é basicamente um script de shell que é executado na primeira inicialização de sua instância. Consulte a documentação em UserData para obter mais detalhes sobre isso.

Se você quiser configurar um conjunto de chaves públicas , poderá usar AWS :: CloudFormation :: Init em vez disso.

Na seção de arquivos, declare o arquivo authorized_keys:

"files" : {                                                                                                                                                                                                                                                                               
  "/home/ec2-user/.ssh/authorized_keys" : {                                                                                                                                                                                                                                               
    "content" : { "Fn::Join" : ["", [                                                                                                                                                                                                                                                     
      { "Fn::FindInMap" : [ "Admins", "userx", "sshPublicKey"] }, "\n",                                                                                                                                                                                                                
      { "Fn::FindInMap" : [ "Admins", "usery", "sshPublicKey"] }, "\n"                                                                                                                                                                                                                 
    ]] },                                                                                                                                                                                                                                                                                 
    "mode" : "000600",                                                                                                                                                                                                                                                                    
    "owner" : "ec2-user",                                                                                                                                                                                                                                                                 
    "group" : "ec2-user"                                                                                                                                                                                                                                                                  
  }
  ...

Os dados do usuário neste exemplo são provenientes da seção Mapeamentos do modelo de cloudformation:

"Admins" : {                                                                                                                                                                                                                                                                          
  "userx" : { "sshPublicKey" : "ssh-rsa AAAABxxxxx...xxxxBSES/H userx" },
  "usery" : { "sshPublicKey" : "ssh-rsa AAAABxxxxx...xxxxKM+aSe usery" }
}

Por favor, teste primeiro usando um nome de arquivo diferente ao invés de authorized_keys , pois você será bloqueado da sua instância quando cometer o menor erro.

    
por 03.09.2015 / 11:47