使用ansible分发ssh密钥

时间:2017-08-10 18:12:21

标签: ansible ansible-2.x

我已将用户帐户部署到我们的测试计算机,并制作了他们的主目录并生成了ssh密钥。用户按预期创建。

enter image description here

如何将密钥复制到每台服务器的授权密钥,以便他们可以在不输入密码或至少使用passpharase的情况下执行ssh?

---
- hosts: all
  remote_user: root
  vars:
    users:
      - username: test9
      - username: test8
      - username: test7

  tasks:
  - name: Adding users
    user:
      name: "{{ item.username }}"
      state: present
      createhome: yes
      generate_ssh_key: yes
      ssh_key_bits: 2048
    with_items: "{{ users }}"

我试过了:

---
- hosts: all
  remote_user: root
  vars:
    users:
      #- username: test9
      - username: test8
      - username: test7

  tasks:
  - name: Adding users
    authorized_key: user='{{item.username}}' state=present key="{{ lookup('file', '/home/{{ item.username}}/.ssh/id_rsa.pub')}}" manage_dir=no
    with_items: "{{ users }}"

并收到错误消息message: could not locate file in lookup: /home/test8/.ssh/id_rsa.pub"}是否尝试在ansible服务器而不是那些主机中找到该文件?我怎么能解决这个问题?对不起,我是ansible的新手。

1 个答案:

答案 0 :(得分:3)

根据Ansible's docs on Lookups

  

查找发生在本地计算机上,而不是远程计算机上。

所以Ansible试图在“Ansible Server”上找到用户的密钥。

我个人不会在您的用户任务中使用generate_ssh_key参数。

  1. 每个用户将为每个服务器使用不同的密钥。
  2. 你会的 将密钥分发给每个用户,因为他们无法获得 首先在服务器上。
  3. 如果你真的想要安全 使用用户的私钥,最好的方法是not to distribute them at all
  4. 我会向用户说明如何生成密钥并要求他们在生成密钥后向我提供公钥。然后,您可以通过查找或作为变量将pub键传递给Ansible。

    但是,如果您设置了方法,我就不会使用authorized_keys模块。相反,我只是复制文件。

    - name: copy pub key to authorized_keys
      copy:
        src: "/home/{{ item.username }}/.ssh/id_rsa.pub"
        dest: "/home/{{ item.username }}/.ssh/authorized_keys"
        user: "{{ item.username }}"
        group: "{{ item.username }}"
        mode: "0644"
        remote_src: True
      with_items: "{{ users }}"