surgiie / vault-cli
一个用于存储加密的 `AES-256` 或 `AES-128` json 数据的 PHP 命令行接口,加密密钥由主密码派生。
Requires
- php: ^8.1
- illuminate/encryption: ^10.17|^11.0
- laravel/prompts: ^0.1.1
- spatie/invade: ^2.0
- symfony/yaml: ^6.3
Requires (Dev)
- fakerphp/faker: ^1.9.1
- laravel-zero/framework: ^10.2|^11.0
- laravel/pint: ^1.13
- mockery/mockery: ^1.4.4
- pestphp/pest: ^2.10.0
This package is auto-updated.
Last update: 2024-08-29 05:07:22 UTC
README
一个用于存储加密的 AES-256
或 AES-128
json 数据的 PHP 命令行接口,加密密钥由主密码派生。
安装
要安装,请运行以下命令
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_
环境变量,以设置特定保险库的密码。如果未设置,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
目录在主机机器上持久化,并保持同步。