我写了一个剧本
- 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 pub键复制到host2。它的写入方式将再次将pub键复制到host1。
如何告诉Ansible将pub键复制到host2?感谢
答案 0 :(得分:0)
我认为这可能是你的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
答案 1 :(得分:0)
两个选项。在host1:
如果super.onRequestPermissionsResult(requestCode, permissions, grantResults);
可用:
ssh-copy-id
或
shell: ssh-copy-id admin@host2
注意:我没有经过测试。您可能需要调整它以使其正常工作。
答案 2 :(得分:0)
出于我的尊重,我不认为“helloV”的答案是正确的,由于剧本,它会将公钥从host1复制到host2的authorized_keys,但它也会尝试复制公众密钥从host2到host2上的auhorized_keys。如果host2中不存在公钥,则会失败。 如果你希望这只在从host1到host2的情况下工作,你应该使用when语句,但是,我认为这不是正确的方法,也许你应该在playbook中包含公钥作为文件那么你可以随时使用。 所以我的建议将是下一个:
- 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}} 中给出的host1名称更改host1