Ssh 如何使用Ansible和用户模块将现有公钥添加到授权密钥文件中?
我正在用Ansible编写一个简单的任务,创建一个用户并添加一个现有的RSA公钥。这是我写的代码:Ssh 如何使用Ansible和用户模块将现有公钥添加到授权密钥文件中?,ssh,ansible,ssh-keys,Ssh,Ansible,Ssh Keys,我正在用Ansible编写一个简单的任务,创建一个用户并添加一个现有的RSA公钥。这是我写的代码: - name: SYSTEM - Create test user tags: system-user user: name: "{{ test_user }}" state: present createhome: yes - name: SYSTEM - Add existing pub key for test user tag
- name: SYSTEM - Create test user
tags: system-user
user:
name: "{{ test_user }}"
state: present
createhome: yes
- name: SYSTEM - Add existing pub key for test user
tags: system-user
copy:
content: "{{ test_user_pubkey }}"
dest: "/tmp/test_user_id_rsa.pub"
force: no
owner: "{{ test_user }}"
group: "{{ test_user }}"
mode: 0600
- name: SYSTEM - Set authorized key for test_user took from file
tags: system-user
authorized_key:
user: "{{ test_user }}"
state: present
key: "{{ lookup('file', '/tmp/test_user_id_rsa.pub') }}"
我写的代码并不优雅,我认为最好的选择是在用户创建块中添加现有的RSA公钥,以便创建并填充授权密钥
文件
我已经阅读了但是ssh_key_file方法不包括将现有pub key的值回显到authorized_key
文件的可能性(最终目的是能够使用用户和私钥与ssh进行远程连接)
ssh\u key\u file=可以选择指定ssh密钥文件名。如果这是一个
相对文件名,然后它将是相对于用户的家
目录
Ansible是否可以在用户模块中管理此过程?您的问题的答案是:
- name: SYSTEM - Create test user
tags: system-user
user:
name: "{{ test_user }}"
state: present
createhome: yes
- name: SYSTEM - Set authorized key for test_user took from file
tags: system-user
authorized_key:
user: "{{ test_user }}"
state: present
key: "{{ test_user_pubkey }}"
这就是所需要的一切
关于您对文档的阅读,
ssh\u key\u文件
涉及到生成一个ssh密钥对,这不是您想要的。所以我一直在隐藏这个线程,试图让它缠绕在我的头上。。我最终能够绕开这一切
首先,我倾向于将所有内容都塞进dicts,然后在需要在jinja2中循环时使用| dict2items
我的主要问题是,一旦用户模块生成ssh_密钥,就没有干净的方法可以使用您刚刚制作的授权_密钥模块(或者我认为我可能不是这里最聪明的人),而不以不可能的方式弯曲Ansible(slurping?不可能在变量中放置另一个变量(根据我的尝试)“{{slurp{{item.key}}{b64decode}}”似乎是可撤销的)
因此,如果您正在使用大量循环,并且不愿意将所有密钥复制到本地主机(这确实很耗时),我发现了一个不让读取代码成为奥运会挑战的秘密技巧:
- name: Prepare the SFTP user
user:
name: "{{ item.key }}"
groups: sftp_users
home: /home/{{ item.key }}
password: "{{ impossible_sftp_pass }}"
generate_ssh_key: yes
ssh_key_file: .ssh/id_rsa
shell: /bin/nologin
with_dict: "{{ instances }}"
- name: sneaky way to get the keys right
shell: cat /home/{{ item.key }}/.ssh/id_rsa.pub > /home/{{ item.key }}/.ssh/authorized_keys
args:
creates: /home/{{ item.key }}/.ssh/authorized_keys
with_dict: "{{ instances }}"
在本例中,我们的目标是设置一个STFP堡垒主机,该主机将最终将rsync SFTP数据重新同步到专用网络内的相应web前端。因此您编写了一些代码,甚至在发布到StackOverflow之前都没有试过?因为它在执行时会失败。它会说
/tmp/test\u user\u id\u rsa.pub
不存在(除非您的本地计算机上有乱七八糟的东西)。您的错误消息是对的,我在测试期间收到了,但我忘了在帖子中提到它。我将对其进行编辑以澄清,并将对我未来的帖子更加谨慎。此外,我也不太清楚为什么要用代码来获取它,因为文件在副本运行后就存在了。