使用 ansible 分发 ssh 密钥

Distribute ssh keys using ansible

我已经将用户帐户部署到我们的测试机器上,还创建了它们的主目录并生成了 ssh 密钥。用户按预期创建。

我如何将他们的密钥复制到每台服务器的授权密钥,以便他们可以在不输入密码或至少使用密码的情况下执行 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的新手。

根据Ansible's docs on Lookups

Lookups occur on the local computer, not on the remote computer.

所以 Ansible 正试图在 "Ansible Server" 上找到您的用户密钥。

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

  1. 每个用户对于每个服务器都有不同的密钥。
  2. 你将拥有 将密钥分发给每个用户,因为他们将无法获得 首先在服务器上。
  3. 如果你真的想要安全 使用您用户的私钥,最好的方法是 不要 分发它们.

我会向用户提供有关如何生成密钥的说明,并要求他们在生成后向我提供他们的 public 密钥。然后您可以通过查找或作为变量将 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 }}"