Добавление пользовательского ssh-ключа в vagrant

Я тестирую обеспечение с помощью ansible локально, а с помощью vagrant я имитирую внешнюю машину. Как добавить свой ключ к бродяге и пользователю root в бродягу?


person Sławosz    schedule 31.03.2014    source источник
comment
Вы хотите получить свои ключи в свой ящик через ansible (например, DomaNitro, описанный ниже) или вы хотите получить эти ключи вручную или с помощью оболочки, чтобы вы могли протестировать свою настройку ansible?   -  person Sgoettschkes    schedule 31.03.2014


Ответы (2)


В вашем бродячем файле вы можете использовать что-то вроде

  ## Ansible Provisioning
  cfg.vm.provision :ansible do |ansible|
      ansible.playbook = "vagrant-provision.yml"
      ## Debugging
      ansible.verbose =  true
      ansible.verbose="vvvvv"
  end

Создайте файл с именем vagrant-provision.yml в том же каталоге, что и ваш бродячий файл. Я предполагаю, что вы используете Ubuntu, вы можете изменить группы для других систем.

---
#
# This playbook deploys your keys to the vagrant
#

- name: Provision my keys
  hosts: all
  sudo: True
  vars:
    localuser: "{{ lookup('ENV','USER') }}"
  tasks:
    - name: Create your local user
      user: 
        name="{{localuser}}"
        home="/home/{{localuser}}"
        shell="/bin/bash"
        append="true"
        group="admin"
        comment="{{localuser}}"


    - name: Putting you authorized_key
      authorized_key: 
        key="{{lookup('file', '~/.ssh/id_rsa.pub')}}"
        user="{{localuser}}"
        manage_dir=yes

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

person DomaNitro    schedule 31.03.2014

Это можно сделать, смешав "file" и "shell", например:

$enable_root_passwordless_ssh_access = <<SCRIPT
#vagrant user has sudo passwordless access on precise32.box
[ -d /root ]      || sudo mkdir /root
[ -d /root/.ssh ] || sudo mkdir /root/.ssh
[ -f /tmp/id_rsa.pub ] && sudo mv /tmp/id_rsa.pub /root/.ssh/authorized_keys
sudo chmod 0700 /root/.ssh
sudo chmod 0600 /root/.ssh/authorized_keys
sudo chown root:root /root/.ssh/authorized_keys
SCRIPT

machine.vm.provision "file",  source: "~/.ssh/id_rsa.pub", destination: "/tmp/id_rsa.pub"
machine.vm.provision "shell", inline: $enable_root_passwordless_ssh_access
person Javier López    schedule 16.06.2015
comment
@JonathanLeaders В приведенном выше коде есть опечатка: скрипт проверяет /root/.shh вместо .ssh. В любом случае, лучшей реализацией было бы использование mkdir -p /root/.ssh - одна команда вместо четырех, см. man mkdir для объяснения. - person geekQ; 12.12.2017