surgiie/vault-cli

一个用于存储加密的 `AES-256` 或 `AES-128` json 数据的 PHP 命令行接口,加密密钥由主密码派生。

安装: 69

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:项目

v0.1.1 2024-06-09 18:16 UTC

This package is auto-updated.

Last update: 2024-08-29 05:07:22 UTC


README

一个用于存储加密的 AES-256AES-128 json 数据的 PHP 命令行接口,加密密钥由主密码派生。

Tests

安装

要安装,请运行以下命令

composer global require surgiie/vault-cli

支持的存储驱动程序

  • 本地文件系统

支持的加密算法

  • aes-128-cbc
  • aes-256-cbc
  • aes-128-gcm
  • aes-256-gcm

支持的 PBKDF 哈希算法

  • sha256
  • sha512

了解更多 - hash_pbkdf2

入门

要开始使用新的 vault,请运行以下命令

vault new <name>

配置

一旦有了可以工作的 vault,就可以开始使用 cli。cli 从 ~/.vault/config.yaml 文件读取配置。该文件将包含 vault 的配置和 cli 的其他选项。例如,为了使 cli 能够加密/解密 vault 项目,需要设置加密选项并在配置文件中注册 vault。例如,您需要在配置文件中设置加密选项并注册 vault,以便 cli 能够知道如何加密/解密 vault 项目。

vaults:
  your-vault-name:
    algorithm: sha256
    cipher: aes-128-cbc
    driver: local
    iterations: 600000

注意 - 当您运行 vault new 命令并自动注册 vault 时,将为您创建 ~/.vault/config.yaml 文件。

选择 Vault

要选择 cli 应与之交互的 vault,请使用 vault use 命令

vault use <your-vault-name>

或者,您可以直接更新 ~/.vault/config.yaml 文件中的 use-vault 选项

use-vault: <your-vault-name>
vaults:
    your-vault-name:
        # ... your vault options

存储项目

要将项目存储到 vault 中,请运行 item:new 命令

vault item:new github_login --content="somepassword" --password="<your-encryption-password>"

这将存储加密的 JSON 数据到 vault 中。解密后,此示例的 JSON 结构将是

{
    "name": "github_login",
    "content": "some_password",
}

从文件加载内容

如果您希望从文件加载 vault 项的内容,请使用 --content-file 标志代替 --content 来从文件加载项内容

vault item:new some_name --content-file="/path/to/some/file" --password="<your-encryption-password>"

在终端编辑器中设置新项目内容

如果您没有传递 --content--content-file 标志,当您运行命令时,系统将提示您通过打开临时文件和终端编辑器(在您的 ~/.vault/config.yaml 文件中的 terminal-editor)来设置内容。一旦关闭终端编辑器,命令将创建 vault 项目。

存储额外数据

如果您想与 vault 项目一起存储额外数据,可以将任何任意键/值选项传递给命令

vault item:new SOME_NAME
        --content="some secret content" \
        --password="<your-encryption-password>" \
        --something-else="example"
        --extra-data="foo"

注意:有一些选项是为命令本身保留的,不能用作额外数据,您可以通过 --help 菜单查看这些选项。

这将存储一个包含您的内容的加密 json 文件,但在解密后,此示例的结构将是

{
    "name": "SOME_NAME",
    "content": "some secret content",
    "something-else": "example",
    "extra-data": "foo"
}

从文件加载 JSON 键的内容

如果您想加载 JSON 数据中特定键的值,请使用格式为 <key>:<path>--key-data-file 选项。

例如,要加载 extra-data 键的内容,命令将是

vault item:new \
        some_name \
        --content="some secret content" \
        --password="<your-encryption-password>" \
        --key-data-file="extra-data:/path/to/file/with/content"

这将存储一个包含您的内容的加密 json 文件,但在解密后,此示例的结构将是

{
    "name": "SOME_NAME",
    "content": "some secret content",
    "something-else": "example",
    "extra-data": "Whatever content was in the file"
}

使用命名空间对 Vault 项进行分类

保险库项目按默认命名空间分组/分类。命名空间只是目录/文件夹或过滤器,保险库项目将进入其中。命名空间是按用途对项目进行分类和过滤的好方法。要为项目指定自定义命名空间,请使用--namespace标志。

vault item:get some-item --namespace=other

使用环境变量存储密码

如果您不想在命令中传递--password选项,可以设置VAULT_CLI_PASSWORD环境变量,并使用您的加密密码。cli将使用此密码作为所有命令的默认密码。当与多个保险库一起工作时,您可以设置VAULT_CLI__PASSWORD环境变量,以设置特定保险库的密码。如果未设置,cli将回退到全局的VAULT_CLI_PASSWORD环境变量。

从保险库检索项目

要输出项目的内容,请使用item:get命令

vault item:get some_item_name

这将输出解密的内容。

从保险库中删除项目

您可以使用item:remove命令从所选保险库中删除项目

vault item:remove --name="some_item_name"

注意 您可以多次传递--name选项来在单个命令调用中删除多个项目。

检索完整的JSON

默认情况下,只有content字段被打印到终端。要打印整个保险库项的JSON,请使用带有--json标志的命令

vault item:get some_item_name --json

重新加密保险库项目

要使用新密码重新加密保险库中的所有项目,请使用reencrypt命令

vault reencrypt --old-password=<old-password> --password=<new-password>

使用新的加密选项重新加密

如果您正在更新加密选项,例如切换哈希算法或更改迭代次数,您可以使用以下命令行选项覆盖配置选项

vault reencrypt
    # old options to decrypt the items first
    --decrypt-algorithm=sha256 \
    --decrypt-iterations=100000 \
    --old-password=<old-password>
    # new options to encrypt the items with
    --algorithm=sha512 \
    --iterations=210000 \
    --cipher=aes-256-cbc \
    --password=<your-new-master-password>

注意 - 此命令将自动将新选项保存到~/.vault/config.yaml文件。

将项目内容复制到剪贴板

要复制保险库项目的content json密钥到剪贴板,请使用--copy标志

vault item:get some_item_name --copy

要复制json中的特定键,只需将json键传递给--json-key选项,并带有--copy标志

vault item:get some_name --copy --json-key=some-key

要复制完整的json有效负载,将--json-key选项设置为*,以指定要复制到剪贴板的json有效负载中的所有键。例如

vault item:get some_item_name --copy --json-key="*"

注意:默认的用于此的二元程序在Windows/WSL2上为copy.exe,在Linux上为xclip。这两个都假定已安装。如果您想使用自定义命令将保险库项目复制到剪贴板,请设置VAULT_CLI_COPY_COMMAND环境变量,并使用:value:占位符。例如someprogram :value:

在Docker中复制到剪贴板

上述方法仅在您在主机机器上运行cli时有效。如果您在容器中运行cli,您将需要使用不同的方法手动复制到剪贴板,因为剪贴板不会在您的主机和Docker容器之间共享。您可以存储vault item:get命令的输出到一个变量,然后将它管道到剪贴板程序。例如

output=$(vault-cli item:get example --password=example); echo $output | clip.exe
output=$(vault-cli item:get example --password=example); echo $output | xclip -sel clip

output=$(vault-cli item:get example --json-key="some-key" --password=example); echo $output | clip.exe
output=$(vault-cli item:get example --json-key="*" --password=example); echo $output | xclip -sel clip

将保险库项目内容导出到环境文件

要将保险库项的content字段导出到环境文件,请使用export:env-file命令。例如

vault export:env-file --export="some-item-name" --export="some-other-item-name"

这将导出保险库项值到当前目录中的.env文件。

在上面的例子中,你的 .env 文件将包含以下变量

SOME_ITEM_NAME="The content"
SOME_OTHER_ITEM_NAME="The other content"

注意 这将附加到现有的 .env 文件,或者如果不存在,则创建一个,并覆盖之前存在的任何变量。默认情况下,这将添加/创建当前目录中的 .env 文件。要指定自定义名称/路径,请使用 --env-file 选项。

别名/自定义环境变量名称

如果保险库项的名称不是你希望用于 .env 文件的名称,你可以在传递 --export 选项时使用别名,格式为 <保险库项名称>:<环境变量名称>。例如

vault export:env-file --export="some-item-name:SOME_CUSTOM_NAME" --export="some-other-item-name:SOME_OTHER_CUSTOM_NAME" 将生成具有自定义环境变量名称的 .env 文件,而不是保险库项的名称

SOME_CUSTOM_NAME="The content"
SOME_OTHER_CUSTOM_NAME="The other content"

在导出中包含其他/非保险库环境变量。

如果你想将一些其他的环境变量包含在你的 env 文件中,这些变量不是导出的 .env 文件中的保险库项,你可以使用 --include 选项

vault export:env-file --export="some-item-name" --include="SOME_ENV_VARIABLE_NAME:THE_VALUE

在这个例子中,SOME_ENV_VARIABLE_NAME="THE_VALUE" 将包含在你的导出 .env 文件中。

使用 Docker 运行

如果你没有安装或不想安装 php,你可以使用提供的 docker 脚本启动一个容器,你可以在这个容器中使用 cli。

安装 Docker 脚本

cd /tmp

wget https://raw.githubusercontent.com/surgiie/vault-cli/master/docker

chmod +x ./docker

mv ./docker /usr/local/bin/vault
vault --help

注意 - 你的 ~/.vault 目录将被复制到容器中。你的当前环境变量也将传递到容器中。在执行命令后,~/.vault 目录也将被复制回你的主机机器。这是为了确保在容器中修改的 ~/.vault 目录在主机机器上持久化,并保持同步。