Проблемы с Packer: amazon-ebs: Тайм-аут ожидания SSH

Я новичок в Packer, и я пытаюсь создать образ, используя частную сеть VPC, и у меня постоянно возникает ошибка *amazon-ebs: Timeout waiting for SSH.*

Используемая версия Packer - 1.3.4, а частная подсеть имеет доступ к шлюзу NAT через общедоступную подсеть и таблицу маршрутов. Но поскольку проблема может заключаться в невозможности доступа к экземпляру, я также пробовал использовать другие параметры, например: ssh_interface со значениями private_dns и associate_public_ip_address. Но даже при изменении я получаю ту же ошибку.

В шаблоне, который я использую, есть следующее содержание

"builders": [
{
  "type": "amazon-ebs",
  "access_key": "{{user `aws_access_key`}}",
  "secret_key": "{{user `aws_secret_key`}}",
  "region": "{{user `region`}}",
  "source_ami": "{{user `source_ami`}}",
  "instance_type": "{{user `instance_type`}}",
  "iam_instance_profile": "{{user `role`}}",
  "ssh_username": "{{user `ssh_username`}}",
  "ssh_timeout": "15m",
  "vpc_id": "{{user `vpc_id`}}",
  "subnet_id": "{{user `subnet_id`}}",
  "associate_public_ip_address": true,
  "ami_name": "{{user `name`}}.{{isotime \"2006-01-02T150405Z\"}}",
  "ami_description": "based on {{user `source_ami`}}",
  "tags": {
    "Name": "{{user `name`}}"
  }]

В шаблоне я не определяю группу безопасности, но в журналах Packer я вижу, что он может создать временную группу безопасности, тогда также должен быть доступен доступ к порту 22

==> amazon-ebs: Pausing after run of step 'StepKeyPair'. Press enter to continue. 
==> amazon-ebs: Creating temporary security group for this instance: packer_5
c6b3667-c41f-92bc-aa89-efc5f3a2d8a8
==> amazon-ebs: Authorizing access to port 22 from 0.0.0.0/0 in the temporary security group...
==> amazon-ebs: Pausing after run of step 'StepSecurityGroup'. Press enter to continue. 
==> amazon-ebs: Pausing after run of step 'StepCleanupVolumes'. Press enter to continue. 
==> amazon-ebs: Launching a source AWS instance...

Но проблема не исчезла. Что-то мне не хватает в шаблоне? или что-то, что я должен сделать по-другому, чтобы сгенерировать AMI?


person Alfchee    schedule 19.02.2019    source источник
comment
jww спасибо за подсказку, я собираюсь переместить вопрос. Я задал вопрос здесь, потому что это инфраструктура как код, и здесь есть темы Terraform и Packer. Я также предполагаю, что проблема может быть решена с помощью бастиона внутри общедоступной сети, который может достигать экземпляров в частной сети через таблицы маршрутов. Тогда спасибо.   -  person Alfchee    schedule 25.02.2019


Ответы (4)


Вы не можете получить доступ к ec2 через шлюз NAT. Шлюзы NAT в AWS используются для предоставления доступа в Интернет из VPC, а не из VPC.

У вас есть несколько вариантов:

  1. Make packer запускает ec2 в публичной подсети с публичным ip. Правильно настроите IGW в VPC и таблице маршрутизации.
  2. Разверните в AWS безопасный хост-бастион и используйте его для перехода с рабочей станции с упаковщиком на ec2. Вам нужно будет настроить несколько вещей в вашем packer.json с помощью специального коммуникатора. Здесь документация https://www.packer.io/docs/templates/communicator.html#ssh.

С Уважением

person AGL    schedule 01.03.2019
comment
Спасибо, я думаю, что первый вариант поможет мне быстро решить проблему, но я собираюсь прочитать второй, чтобы избежать проблем в будущем. - person Alfchee; 02.03.2019

Я столкнулся с той же проблемой. Проблема, которую я обнаружил, заключалась в том, что все мои экземпляры запускались в VPC по умолчанию. Несмотря на то, что я настроил SG и таблицу маршрутизации, чтобы разрешить входящий трафик ssh из 0.0.0.0/0. По-прежнему было невозможно получить доступ даже с консоли. Поэтому пришлось создать собственный VPC с правильным интернет-шлюзом, группой безопасности и таблицей маршрутов, и мои последние конструкторы были примерно такими.

  "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "us-******",
        "source_ami": "ami-*********",
        "instance_type": "t2.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}",
        "vpc_id": "{VPC id i had created}",
        "subnet_id": "{Subnet i had created}",
        "security_group_id": "sg with proper ingress port 22 rule enabled from 0.0.0.0"

  }],

Надеюсь, что проблема решена, и простите за мой словарный запас :)

person Attiq Ur Rehman    schedule 05.09.2020

есть еще одна возможность, что упаковщик не может найти ключ для входа на хост-бастион и ожидает входа в систему другими методами.

собранные журналы с экспортом PACKER_LOG = 1, как показано ниже.

==> amazon-ebs: Waiting for SSH to become available...
2020/07/30 12:19:22 packer: 2020/07/30 12:19:22 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain
2020/07/30 12:19:27 packer: 2020/07/30 12:19:27 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
2020/07/30 12:19:32 packer: 2020/07/30 12:19:32 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
2020/07/30 12:19:37 packer: 2020/07/30 12:19:37 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
2020/07/30 12:19:43 packer: 2020/07/30 12:19:43 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
2020/07/30 12:19:48 packer: 2020/07/30 12:19:48 [DEBUG] TCP connection to SSH ip/port failed: Error connecting to bastion: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

Кроме того, для проверки ssh-add -l не следует перечислять ключи, и тогда мы знаем, что упаковщик не может найти ключ для входа в систему.

В этом случае нам просто нужно добавить ключ ssh с помощью ssh-add <path to your ssh keys>, и это должно решить проблему.

person vaibhav pandey    schedule 30.07.2020

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

  "builders": [
    {
      "launch_block_device_mappings": [
        {
          "device_name": "/dev/sda1",
          "volume_type": "gp2",
          "encrypted": true      <-- I was setting it to 'false' while only 'true' works
        }
      ],
      ...
    }
  ],
person Dror Weiss    schedule 29.03.2021