我已将用户帐户部署到我们的测试计算机,并制作了他们的主目录并生成了ssh密钥。用户按预期创建。
如何将密钥复制到每台服务器的授权密钥,以便他们可以在不输入密码或至少使用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的新手。
答案 0 :(得分:3)
查找发生在本地计算机上,而不是远程计算机上。
所以Ansible试图在“Ansible Server”上找到用户的密钥。
我个人不会在您的用户任务中使用generate_ssh_key
参数。
我会向用户说明如何生成密钥并要求他们在生成密钥后向我提供公钥。然后,您可以通过查找或作为变量将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 }}"