【问题标题】:Ansible - failed to lookup userAnsible - 无法查找用户
【发布时间】:2018-06-26 03:42:35
【问题描述】:

如何解决下面运行 ansible 角色的问题?如果远程服务器上不存在用户,ansible 会收到错误消息“无法查找用户 test1:'getpwnam(): name not found: test1”。我需要在多台服务器上管理多个用户。谢谢

vars:
user_list:
  - user: test1
    state: present
    path: /usr/local/test1/.ssh/authoried_keys
    keys:  
      - "ssh-rsa test1"
  - user: test2
    state: absent
    path: /home/test2/.ssh/authoried_keys
    keys:
      - "ssh-rsa test2"

tasks:
- name: Manage SSH-keys
  authorized_key:
    user: "{{ item.0.user }}"
    key: "{{ item.1 }}"
    path: "{{ item.0.path }}"
    state: "{{ item.0.state }}"
  with_subelements:
   - '{{ user_list }}'
   - keys

CentOS Linux 7,Ansible 2.4.2.0

【问题讨论】:

  • 期望是什么?创建用户?跳过任务?默默忽略?
  • 我想在多台服务器上运行它,如果用户不存在,则在服务器上什么都不做,所以跳过这个任务。
  • 这不是您管理基础架构的方式。您应该提前知道(并声明)存在哪些用户。
  • 服务器上有很多用户,但我不需要管理所有用户,只需要管理指定的用户。例如:server1 - user1 - 3 ssh keys server2 - user2 - 3 ssh keys 我需要将指定的 ssh 密钥添加/删除到 users1-2 到 users1-2。你能帮我吗,我该怎么做?
  • 因此,在将密钥添加到他们的配置文件之前,请确保创建特定服务器所需的用户帐户(而不是“所有用户”)。

标签: ansible centos7 getpwnam


【解决方案1】:

也许您可以通过 ansible 的包装器检查现有用户是否为 getent? 感觉简单一点,不用shell模块:

tasks:
      - name: Get existing users
        getent:
          database: passwd

      - name: Disable expired users
        user:
          name: "{{ item.name }}"
          shell: /sbin/nologin
        with_items:
          - "{{ users_removed }}"
        when: item.name in getent_passwd.keys()

请注意,正如@techraf 指出的那样,在生产环境中,您应该始终致力于事先声明和了解哪些用户应该在场和不应该在场:)

【讨论】:

    【解决方案2】:

    我想,我解决了我的问题。

    tasks:
    - name: Check for users
      shell: cat /etc/passwd | cut -f1 -d":"
      register: sshkeys_users
      changed_when: False
    
    - name: Manage SSH-keys
      authorized_key:
        user: "{{ item.0.user }}"
        key: "{{ item.1 }}"
        path: "{{ item.0.path }}"
        state: "{{ item.0.state }}"
      with_subelements:
        - '{{ user_list }}'
        - keys
      when: sshkeys_users is defined and item.0.user in sshkeys_users.stdout_lines
    

    【讨论】:

    • 这些变化不是自我解释的。请澄清你做了什么。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多