2016-12-21 9 views
0

Я написал пьесуанзибль: Добавление ключа содержание host1 в authorized_keys от host2

  1. Генерировать ключи паба на host1
  2. Копирование в пабе клавиши на моей управления машиной
  3. Развертывание ключей паба на втором хосте, т.е. host2

- hosts: '{{ target }}' 
    tasks: 
    - name: Check admin pub keys are present on host1 
    stat: 
     path: /var/services/homes/admin/.ssh/id_rsa.pub 
    - name: Generate pub keys on host1 if non-existing 
    user: 
     name: admin 
     generate_ssh_key: yes 
     ssh_key_bits: 4096 
    when: stat_result.stat.exists == False 
    - name: Downloading pub key from host1 to the control machine 
    command: scp [email protected]{{ansible_host}}:/var/services/homes/admin/.ssh/id_rsa.pub /tmp/ 
    delegate_to: 127.0.0.1 
    - name: Copy pub key of host1 to host2 
    authorized_keys: 
     user: admin  
     key: "{{ lookup('file', '/tmp/id_rsa.pub') }}" 
     state: present 

я запускаю его с:

ansible-playbook -i hosts keys.yml -e "target=host1" 

проблемой в последней задаче, то есть копировать паб ключ host1 в host2. Как это записано, он снова скопирует ключ pub на host1.

Как я могу заставить Ansible скопировать ключ pub в host2 вместо этого? Спасибо

ответ

0

два варианта. На host1:

Если ssh-copy-id доступен:

shell: ssh-copy-id [email protected] 

или

shell: cat /var/services/homes/admin/.ssh/id_rsa.pub | (ssh [email protected] "cat >> ~/.ssh/authorized_keys") 

Примечание: Я не проверял. Вы можете настроить его, чтобы он работал.

0

Я думаю, что это может быть ваша команда scp.

Это сложно, но не можете ли вы просто скопировать ключи прямо в host2? вы будете использовать пароли, чтобы получить там, в любом случае нет?

т.е.

scp [email protected]:/var/services/homes/admin/.ssh/id_rsa.pub [email protected]:/usr/admin/.ssh/. 

Есть еще одна причина, почему вы должны использовать «контрольный узел»? т. е. существует ли исполняемый скрипт?

редактирует:

scp [email protected]:/var/services/homes/admin/.ssh/id_rsa.pub [email protected]:/tmp/. 

cat /tmp/id_rsa.pub >> /usr/admin/.ssh/authorized_keys 
+1

На самом деле мне не нужно привлекать мое управление машиной. Я мог бы scp прямо к host2. Проблема в том, что я хотел бы добавить содержимое файла id_rsa.pub в файл authorized_keys хоста2, а не просто скопировать его. Могу ли я сделать это с вашей командой? Спасибо – diegus

+0

так, scp он там первый, тогда вы его коту и указываете, чтобы добавить файл authorized_keys.- убедитесь, что вы используете >>, поскольку один> фактически уничтожит существующие данные в файле authorized_keys. –

0

При всем моем уважении, я не думаю, что ответ «helloV» правильный, из-за пьесы, он скопировал бы открытый ключ из host1 в authorized_keys host2, но также попытается скопировать открытый ключ от host2 до auhorized_keys на host2. И если открытый ключ не существует в host2, если не удастся. Если вы хотите, чтобы это работало только в случае с host1 на host2, вы должны использовать оператор when, но также, я не думаю, что это правильный способ сделать это, возможно, вы должны включить открытый ключ в playbook как файл затем вы можете использовать, когда захотите. Так что мое предложение будет следующее:

- name: Copy public key to authorized keys 
    shell: cat /var/services/homes/admin/.ssh/id_rsa.pub | (ssh [email protected] "cat >> ~/.ssh/authorized_keys") 
    when: target == "host1" 

host1 должен быть изменен с именем host1 даваемым в {{цели}}

 Смежные вопросы

  • Нет связанных вопросов^_^