【问题标题】:Ansible: Append key content of host1 to authorized_keys of host2Ansible:将host1的密钥内容附加到host2的authorized_keys
【发布时间】:2016-12-21 15:38:20
【问题描述】:

我写了一个剧本

  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?谢谢

【问题讨论】:

    标签: ansible ansible-playbook authorized-keys


    【解决方案1】:

    两个选项。在主机 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")
    

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

    【讨论】:

      【解决方案2】:

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

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

      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
      

      【讨论】:

      • 其实我不需要涉及我的控制机。我可以直接 scp 到 host2。问题是我想将 id_rsa.pub 文件内容附加到 host2 的 authorized_keys 文件中,而不仅仅是复制它。我可以用你的命令来做吗?谢谢
      • 所以,先把它 scp 到那里,然后你 cat 并将它指向附加到 authorized_keys 文件。 - 确保使用 >>,因为单个 > 实际上会擦除 authorized_keys 文件中的现有数据。
      【解决方案3】:

      恕我直言,我不认为“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 名称来更改

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多