Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 如何使用Ansible和用户模块将现有公钥添加到授权密钥文件中?_Ssh_Ansible_Ssh Keys - Fatal编程技术网

Ssh 如何使用Ansible和用户模块将现有公钥添加到授权密钥文件中?

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

我正在用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
  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
不存在(除非您的本地计算机上有乱七八糟的东西)。您的错误消息是对的,我在测试期间收到了,但我忘了在帖子中提到它。我将对其进行编辑以澄清,并将对我未来的帖子更加谨慎。此外,我也不太清楚为什么要用代码来获取它,因为文件在副本运行后就存在了。