使用 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的新手。
Lookups occur on the local computer, not on the remote computer.
所以 Ansible 正试图在 "Ansible Server" 上找到您的用户密钥。
就我个人而言,我不会在您的用户任务中使用 generate_ssh_key
参数。
- 每个用户对于每个服务器都有不同的密钥。
- 你将拥有
将密钥分发给每个用户,因为他们将无法获得
首先在服务器上。
- 如果你真的想要安全
使用您用户的私钥,最好的方法是 不要
分发它们.
我会向用户提供有关如何生成密钥的说明,并要求他们在生成后向我提供他们的 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 }}"
我已经将用户帐户部署到我们的测试机器上,还创建了它们的主目录并生成了 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的新手。
Lookups occur on the local computer, not on the remote computer.
所以 Ansible 正试图在 "Ansible Server" 上找到您的用户密钥。
就我个人而言,我不会在您的用户任务中使用 generate_ssh_key
参数。
- 每个用户对于每个服务器都有不同的密钥。
- 你将拥有 将密钥分发给每个用户,因为他们将无法获得 首先在服务器上。
- 如果你真的想要安全 使用您用户的私钥,最好的方法是 不要 分发它们.
我会向用户提供有关如何生成密钥的说明,并要求他们在生成后向我提供他们的 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 }}"