Использование упаковщика для копирования файла с хоста в сгенерированное изображение без пароля

В настоящее время я использую упаковщик для создания настраиваемых изображений из заданной конфигурации. Файл упаковщика .json включает положения, описанные в этом руководстве по упаковщику. .

Вместо того, чтобы вводить там команды, я использовал опцию оболочки, в которой я могу написать кучу sudo apt-get install команд для настройки изображений.

Проблема в том, что мне нужно скопировать файл с моего компьютера на изображения. Чтобы было ясно, компьютер, которым я владею, также является тем, на котором я запускаю команду packer build example.json.

В сценарии оболочки, как я могу сделать безопасную копию, чтобы с точки зрения вновь созданных изображений изображение могло безопасно скопировать файл с моего компьютера на себя, без нужно вводить пароль? Это сценарий оболочки, поэтому я не мог бы ввести его, если бы захотел.

Я понимаю, что, чтобы не вводить пароль, мне нужна аутентификация с открытым/закрытым ключом. В сценарии оболочки у меня есть:

sudo ssh-keygen -t rsa -b 2048
sudo scp ~/.ssh/id_rsa.pub [email protected]:/home/user/.ssh/uploaded_key.pub
sudo ssh [email protected] "echo `cat ~/.ssh/uploaded_key.pub` >> ~/.ssh/authorized_keys"

(Взято из пример здесь и в других местах. , Я так понимаю, что сгенерированное изображение запускает эти команды.)

Проблема с этим и многими подходами, которые я вижу в StackOverflow, например, с этим связанный вопрос, является одним из двух.

  • В первый раз, когда происходит общедоступная/частная аутентификация, кажется, что требуется пароль. Однако это делается полностью в сценарии оболочки, поэтому я не знаю, как этого избежать.
  • Packer генерирует эти образы на лету, поэтому другие подходы, требующие ввода явных идентификаторов AMI для ssh или scp, похоже, не работают.

В тесно связанном вопросе используется "файл " тип предоставления, но я хотел бы сделать это с типом "оболочки", и я не уверен, как использовать как файл, так и параметры оболочки.

Как я могу это решить?


person ComputerScientist    schedule 30.05.2017    source источник


Ответы (1)


Вы должны использовать поставщик file, что-то вроде:

"provisioners": [
  {
    "type": "file",
    "source": "source_file",
    "destination": "dest"
  },
  {
    "type": "script",
    "inline": [ "echo do something here" ]
  }
]

См. документацию: поставщики.

person Rickard von Essen    schedule 30.05.2017
comment
Ах, я не знал, что у нас может быть множество таких, я думал, что помню, как где-то читал, что у нас может быть только один. Позвольте мне попробовать их, хотя мне придется выяснить, что именно входит в аргументы источника/назначения. - person ComputerScientist; 30.05.2017