Вот мой файл Packer.
{
"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"
}
В Google Cloud Engine есть изображения, которые по умолчанию отключают root-доступ по ssh. Centos, Debian и новый образ Container-VM, похоже, входят в их число. Кажется, это решается указанием имени пользователя для использования:
"ssh_username": "anythingyoulike"
... который затем будет создан Packer во время сборки.
Похоже, это связано с этот отчет об ошибке на пакер репо. Это довольно новая ошибка, которая позже исчезнет с образами Debian 8. debian-8-jessie-v20160329
. В качестве обходного пути вы можете указать образ debian debian-8-jessie-v20160329
и вручную применить обновления безопасности.
Попробуйте использовать коммуникатор SHH: https://www.packer.io/docs/templates/communicator.html
Коммуникатор SSH подключается к хосту через SSH. Если у вас включен агент SSH на машине, на которой запущен Packer, он автоматически перенаправит агент SSH на удаленный хост.
Если у вас включен вход в ОС на уровне проекта, вам может потребоваться отключить его для виртуальной машины упаковщика, т.е. добавить его в свой googlecompute
конфигурация построителя:
"metadata": {
"enable-oslogin": "FALSE"
}