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

Как настроить ключи хоста SSH в шаблоне облачной информации?

Я пытаюсь настроить EC2 с известными ключами хоста SSH при загрузке с помощью cloud-init в шаблоне облачной информации. Но теперь я не могу подключиться к серверу по SSH. Сложно отлаживать :-)

Вот часть пользовательских данных моего фрагмента EC2 из моего шаблона:

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

У меня также есть записи для (ec) dsa_public / private в соответствии с документами.

Есть ли какие-то странности с cloudinit, где я также должен указать ssh_authorized_keys? Я предполагаю, что открытый ключ моей пары ключей теперь не загружается на мой EC2 Amazon ...

UserData из вашего вопроса - это в основном сценарий оболочки, который запускается при первой загрузке вашего экземпляра. Увидеть документация по UserData для получения более подробной информации об этом.

Если вы хотите настроить набор общественный ключи, вы можете использовать AWS :: CloudFormation :: Init вместо.

В разделе файлов объявите файл 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"                                                                                                                                                                                                                                                                  
  }
  ...

Пользовательские данные в этом примере поступают из Раздел сопоставлений шаблона облачной информации:

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

Пожалуйста, сначала проверьте это, используя другое имя файла вместо authorized_keys, поскольку вы действительно будете заблокированы для доступа к вашему экземпляру, когда сделаете малейшую ошибку.

Мне нужно было это сделать, потому что у меня не было ключей к нашему продукту env в AWS для подключения ssh к экземплярам, ​​чтобы отладить, почему развертывание CFN не удалось. По разным причинам, в том числе из-за того, что я устранял проблемы с самим cfn-init, я счел лучшей стратегией добавить следующую строку в начало UserData и передать параметр tempSSHkey в CFN:

Properties:
  LaunchTemplateData:
      UserData:
           Fn::Base64: !Sub |
               #!/bin/bash -ex
               sudo echo 'ssh-rsa ${tempSSHkey} temp-ssh-key' >> /home/admin/.ssh/authorized_keys