我已经写了一部戏
- 在host1 上生成酒吧键
- 在我的控制机上复制酒吧键
- 在第二个主机上部署酒吧键,即主机2
- 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键复制到host2。编写的方式将再次将酒吧键复制到host1。
我该如何告诉又可以将酒吧键复制到host2?谢谢
两个选项。在主机上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")
注意:我尚未测试。您可能需要调整它以使其正常工作。
我认为这可能是您的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
在我的全部尊重下,我认为" hellov"的答案是正确的,由于剧本,它会将公共密钥从host1复制到host 2此外,它将尝试将公共密钥从host2复制到host2上的auhorized_keys。如果host2中不存在公共密钥,如果会失败。如果您只想在从host1到host2的情况下使用此功能然后您可以在需要时使用。所以我的建议将是下一个:
- 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"
应该使用{{target}}