community.general.passwordstore lookup – 使用 passwordstore.org 的 pass 工具管理密码

注意

此查找插件是 community.general 集合(版本 10.1.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general

要在 playbook 中使用它,请指定:community.general.passwordstore

概要

  • 使 Ansible 能够从 passwordstore.org pass 工具检索、创建或更新密码。它还可以检索、创建或更新以 YAML 样式键存储在密码文件中的多行数据。

  • 为避免一次访问多个密钥时出现问题,请将 auto-expand-secmem 添加到 ~/.gnupg/gpg-agent.conf。如果无法做到这一点,请考虑改用 lock=readwrite

术语

参数

注释

术语

字符串 / 必需

查询键。

关键字参数

这描述了查找的关键字参数。这些是在以下示例中 key1=value1key2=value2 等值:lookup('community.general.passwordstore', key1=value1, key2=value2, ...)query('community.general.passwordstore', key1=value1, key2=value2, ...)

参数

注释

backend

字符串

在 community.general 5.2.0 中添加

指定要使用的后端。

默认为 pass,passwordstore.org 的原始 pass 工具。

gopass 支持不完整。

选择

  • "pass" ← (默认)

  • "gopass"

配置

  • INI 条目

    [passwordstore_lookup]
    backend = pass
    
  • 变量: passwordstore_backend

backup

布尔值

overwrite=true 一起使用。将先前的密码或子键备份到子键中。

选择

  • false ← (默认)

  • true

create

布尔值

如果密码或子键尚不存在,则创建它。优先于 missing

选择

  • false ← (默认)

  • true

directory

路径

密码存储的目录。

如果 backend=pass,则默认使用 ~/.password-store

如果 backend=gopass,则默认使用 ~/.config/gopass/config.yml 中的 path 字段,如果 gopass 配置中未定义 path,则回退到 ~/.local/share/gopass/stores/root

配置

length

整数

生成的密码的长度。

默认值: 16

lock

字符串

添加于 community.general 4.5.0

如何同步操作。

write 的默认值仅同步写入操作。

readwrite 同步所有操作(包括读取)。这确保 gpg-agent 永远不会并行调用。

none 不进行任何同步。

选择

  • "readwrite"

  • "write" ← (默认)

  • "none"

配置

  • INI 条目

    [passwordstore_lookup]
    lock = write
    

locktimeout

字符串

添加于 community.general 4.5.0

lock 不是 none 时应用的锁超时时间。

带有单位后缀的时间,smh 分别表示秒、分钟和小时。例如,900s 等于 15m

~/.gnupg/gpg-agent.conf 中的 pinentry-timeout 相关,详情请参阅 man gpg-agent

默认值: "15m"

配置

  • INI 条目

    [passwordstore_lookup]
    locktimeout = 15m
    

missing

字符串

添加于 community.general 3.1.0

关于密码文件丢失时要执行的操作的偏好列表。

如果 create=true,则此选项的值将被忽略,并假定为 create

如果设置为 error,如果 passname 不存在,查找将报错。

如果设置为 create,如果 passname 不存在,将使用提供的长度 length 创建该 passname。

如果设置为 emptywarn,如果 passname 不存在,将返回 none。当使用 lookup 而不是 query 时,这将转换为一个空字符串。

选择

  • "error" ← (默认)

  • "warn"

  • "empty"

  • "create"

missing_subkey

字符串

添加于 community.general 8.6.0

关于密码子键丢失时要执行的操作的偏好。

如果设置为 error,如果子键不存在,查找将报错。

如果设置为 emptywarn,如果子键不存在,将返回 none

选择

  • "error"

  • "warn"

  • "empty" ← (默认)

配置

  • INI 条目

    [passwordstore_lookup]
    missing_subkey = empty
    

nosymbols

布尔值

使用字母数字字符。

选择

  • false ← (默认)

  • true

overwrite

布尔值

如果密码或子键已存在,则覆盖它。

选择

  • false ← (默认)

  • true

preserve

布尔值

添加于 community.general 8.1.0

将旧的(编辑过的)密码包含在 pass 文件中。

选择

  • false

  • true ← (默认)

returnall

布尔值

返回密码的所有内容,而不仅仅是第一行。

选择

  • false ← (默认)

  • true

subkey

字符串

默认情况下,返回密码的特定子键。当设置为 password 时,始终返回第一行。

使用 overwrite=true,它将创建子键并返回它。

默认值: "password"

timestamp

布尔值

添加于 community.general 8.1.0

将密码生成信息添加到文件末尾。

选择

  • false

  • true ← (默认)

umask

字符串

添加于 community.general 1.3.0

设置创建的 .gpg 文件的 umask。第一个八进制数必须大于 3(用户可读)。

注意 pass 的默认值为 '077'

配置

userpass

字符串

指定要保存的密码,而不是生成的密码。

注释

注意

  • 当关键字和位置参数一起使用时,位置参数必须列在关键字参数之前:lookup('community.general.passwordstore', term1, term2, key1=value1, key2=value2)query('community.general.passwordstore', term1, term2, key1=value1, key2=value2)

  • 自 community.general 6.0.0 起,查找支持将所有选项作为查找参数传递。

示例

ansible.cfg: |
  [passwordstore_lookup]
  lock=readwrite
  locktimeout=45s
  missing_subkey=warn

tasks.yml: |
  ---

  # Debug is used for examples, BAD IDEA to show passwords on screen
  - name: Basic lookup. Fails if example/test does not exist
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test')}}"

  - name: Basic lookup. Warns if example/test does not exist and returns empty string
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', missing='warn')}}"

  - name: Create pass with random 16 character password. If password exists just give the password
    ansible.builtin.debug:
      var: mypassword
    vars:
      mypassword: "{{ lookup('community.general.passwordstore', 'example/test', create=true)}}"

  - name: Create pass with random 16 character password. If password exists just give the password
    ansible.builtin.debug:
      var: mypassword
    vars:
      mypassword: "{{ lookup('community.general.passwordstore', 'example/test', missing='create')}}"

  - name: >-
      Create a random 16 character password in a subkey. If the password file already exists, just add the subkey in it.
      If the subkey exists, returns it
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, subkey='foo') }}"

  - name: >-
      Create a random 16 character password in a subkey. Overwrite if it already exists and backup the old one.
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, subkey='user', overwrite=true, backup=true) }}"

  - name: Prints 'abc' if example/test does not exist, just give the password otherwise
    ansible.builtin.debug:
      var: mypassword
    vars:
      mypassword: >-
        {{ lookup('community.general.passwordstore', 'example/test', missing='empty')
           | default('abc', true) }}

  - name: Different size password
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, length=42)}}"

  - name: >-
      Create password and overwrite the password if it exists.
      As a bonus, this module includes the old password inside the pass file
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, overwrite=true)}}"

  - name: Create an alphanumeric password
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', create=true, nosymbols=true) }}"

  - name: Return the value for user in the KV pair user, username
    ansible.builtin.debug:
      msg: "{{ lookup('community.general.passwordstore', 'example/test', subkey='user')}}"

  - name: Return the entire password file content
    ansible.builtin.set_fact:
      passfilecontent: "{{ lookup('community.general.passwordstore', 'example/test', returnall=true)}}"

返回值

描述

返回值

列表 / 元素=字符串

一个密码

返回: 成功

作者

  • Patrick Deelman

提示

每个条目类型的配置条目具有从低到高的优先级顺序。 例如,列表中较低的变量将覆盖较高的变量。