Использование Packer с Google Cloud и получение проблемы с SSH-соединением с Debian Build

Вот мой файл упаковщика.

    {
    "variables": {
      "account_json": "{{env `packer_account_json`}}"
    },
    "builders": [
      {
        "type": "googlecompute",
        "account_file": "{{user `account_json`}}",
        "project_id": "united-course-124523",
        "source_image": "debian-8-jessie-v20160711",
        "zone": "us-central1-a",
        "instance_name": "hub-{{timestamp}}",
        "image_name": "hub-{{uuid}}",
        "image_description": "Elasticsearch 2.3.4."
      }
    ],
    "provisioners": [
      {
        "type": "shell",
        "inline": [
          "sleep 20",
          "echo \"slept for 20 seconds.\""
        ]
      },
      {
        "type": "file",
        "source": "../scripts/install-elastic.sh",
        "destination": "../scripts/install-elastic.sh"
      },
      {
        "type": "shell",
        "script": "../scripts/install-elastic.sh",
        "pause_before": "3s"
      }
    ]
  }

Я запускаю это и затем получаю ошибку SSH как показано (с выполнением команды)

$ packer build elastic-2.3.4.json
googlecompute output will be in this color.

==> googlecompute: Checking image does not exist...
==> googlecompute: Creating temporary SSH key for instance...
==> googlecompute: Creating instance...
    googlecompute: Loading zone: us-central1-a
    googlecompute: Loading image: debian-8-jessie-v20160711 in project united-course-124523
    googlecompute: Loading machine type: n1-standard-1
    googlecompute: Loading network: default
    googlecompute: Requesting instance creation...
    googlecompute: Waiting for creation operation to complete...
    googlecompute: Instance has been created!
==> googlecompute: Waiting for the instance to become running...
    googlecompute: IP: 104.197.225.237
==> googlecompute: Waiting for SSH to become available...
==> googlecompute: Error waiting for SSH: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
==> googlecompute: Deleting instance...
    googlecompute: Instance has been deleted!
==> googlecompute: Deleting disk...
    googlecompute: Disk has been deleted!
Build 'googlecompute' errored: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

Я просматривал документы Packer здесь https://www.packer.io/docs/provisioners/file.html касающиеся загрузки файлов, и не вижу ничего о создании соединения SSH, а также проверял документы по удаленному ssh здесь https://www.packer.io/docs/provisioners/shell.html но до сих пор не видно, в чем именно проблема, которая вызывает ошибку изображения с помощью sh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain сообщение.

Я также добавил ключ коммуникатора и его значение в ssh для каждого предложенного @tekjava, и при этом все та же ошибка. Мой строитель выглядел так после дополнения.

{
  "type": "googlecompute",
  "account_file": "{{user `account_json`}}",
  "project_id": "united-course-124523",
  "source_image": "debian-8-jessie-v20160711",
  "zone": "us-central1-a",
  "instance_name": "{{user `instance_name`}}",
  "image_name": "elastic-{{uuid}}",
  "image_description": "Elasticsearch 2.3.4.",
  "communicator": "ssh"
}

3 ответа

Решение

В Google Cloud Engine есть несколько изображений, которые по умолчанию отключают root-доступ по ssh. Centos, Debian и новый образ Container-VM, похоже, находятся среди них. Кажется, это решается указанием имени пользователя для использования:

"ssh_username": "anythingyoulike"

... который затем будет создан Packer во время сборки.

Если у вас включен вход в ОС на уровне проекта, вам может потребоваться отключить его для виртуальной машины упаковщика, т.е. добавить его в свой googlecompute конфигурация построителя:

      "metadata": {
        "enable-oslogin": "FALSE"
      }

Похоже, это связано с этим сообщением об ошибке в репо упаковщика. Это довольно новая ошибка, позже она не работает с образами Debian 8 debian-8-jessie-v20160329, В качестве обходного пути вы можете указать образ Debian debian-8-jessie-v20160329 и вручную применить обновления безопасности.

Попробуйте использовать SHH Communicator: https://www.packer.io/docs/templates/communicator.html

Коммуникатор SSH подключается к хосту через SSH. Если на компьютере, на котором работает Packer, включен агент SSH, он автоматически перенаправит агент SSH на удаленный хост.

Другие вопросы по тегам