Ansible:将host1的关键内容追加到host2的authorized_keys
Ansible: Append key content of host1 to authorized_keys of host2
我写了一个剧本给
- 在主机 1 上生成公钥
- 复制我控制机器上的公钥
- 在第二台主机上部署公钥,即 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"
问题出在最后一个任务中,即将主机 1 的公钥复制到主机 2。它的编写方式会将公钥再次复制到 host1。
我如何告诉 Ansible 将 pub 密钥复制到 host2?谢谢
我认为这可能是您的 scp 命令。
好吧,这是一个棘手的问题,但是你不能直接将密钥 scp 到 host2 吗?无论如何,您都会使用密码到达那里,不是吗?
即
scp admin@host1:/var/services/homes/admin/.ssh/id_rsa.pub admin@host2:/usr/admin/.ssh/.
是否还有其他原因需要使用 "control host"?即 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
两种选择。在主机 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")
注意:我还没有测试过。您可能需要对其进行调整以使其正常工作。
恕我直言,我不认为 "helloV" 的答案是正确的,由于剧本,它会将 public 密钥从 host1 复制到 authorized_keys host2 的,但它也会尝试将 public 密钥从 host2 复制到 host2 上的 auhorized_keys。如果主机 2 中不存在 public 键,则失败。
如果你想让它只在从 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 名称
我写了一个剧本给
- 在主机 1 上生成公钥
- 复制我控制机器上的公钥
- 在第二台主机上部署公钥,即 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"
问题出在最后一个任务中,即将主机 1 的公钥复制到主机 2。它的编写方式会将公钥再次复制到 host1。
我如何告诉 Ansible 将 pub 密钥复制到 host2?谢谢
我认为这可能是您的 scp 命令。
好吧,这是一个棘手的问题,但是你不能直接将密钥 scp 到 host2 吗?无论如何,您都会使用密码到达那里,不是吗?
即
scp admin@host1:/var/services/homes/admin/.ssh/id_rsa.pub admin@host2:/usr/admin/.ssh/.
是否还有其他原因需要使用 "control host"?即 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
两种选择。在主机 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")
注意:我还没有测试过。您可能需要对其进行调整以使其正常工作。
恕我直言,我不认为 "helloV" 的答案是正确的,由于剧本,它会将 public 密钥从 host1 复制到 authorized_keys host2 的,但它也会尝试将 public 密钥从 host2 复制到 host2 上的 auhorized_keys。如果主机 2 中不存在 public 键,则失败。 如果你想让它只在从 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 名称