0

我写了一个剧本

  1. 在 host1 上生成 pub 密钥
  2. 复制我的控制机器上的 pub 密钥
  3. 在第二台主机上部署 pub 密钥,即 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 admin@{{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 的pub key 复制到host2。它的编写方式会将发布密钥再次复制到主机1。

我如何告诉 Ansible 将 pub 密钥复制到 host2?谢谢

4

3 回答 3

0

我认为这可能是您的 scp 命令。

这是一个棘手的问题,但是您不能直接将密钥 scp 到 host2 吗?无论如何,您会使用密码到达那里吗?

IE

scp admin@host1:/var/services/homes/admin/.ssh/id_rsa.pub admin@host2:/usr/admin/.ssh/.

您需要使用“控制主机”是否还有其他原因?即 ansible 脚本是从那里运行的吗?

编辑:

 scp admin@host1:/var/services/homes/admin/.ssh/id_rsa.pub admin@host2:/tmp/.

cat /tmp/id_rsa.pub >> /usr/admin/.ssh/authorized_keys
于 2016-12-21T15:49:19.363 回答
0

两种选择。在主机 1 上:

如果ssh-copy-id可用:

shell: ssh-copy-id admin@host2

或者

shell: cat /var/services/homes/admin/.ssh/id_rsa.pub | (ssh admin@host2 "cat >> ~/.ssh/authorized_keys")

注意:我没有测试过。您可能需要对其进行调整以使其正常工作。

于 2016-12-21T16:09:58.090 回答
0

恕我直言,我不认为“helloV”的答案是正确的,由于剧本,它会将公钥从host1复制到host2的authorized_keys,但它也会尝试从host2复制公钥到 host2 上的 auhorized_keys。如果 host2 中不存在公钥,则 if 将失败。如果您希望它仅在从 host1 到 host2 的情况下工作,您应该使用 when 语句,而且,我认为这不是正确的方法,也许您应该在剧本中包含公钥作为文件然后您可以在需要时使用。所以我的建议是下一个:

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

host1 应使用 {{target}} 中给出的 host1 名称进行更改

于 2017-07-14T11:20:28.863 回答