9 个不稳定版本 (3 个破坏性更新)
0.4.1 | 2023年9月22日 |
---|---|
0.4.0 | 2023年9月15日 |
0.3.0 | 2023年9月10日 |
0.2.1 | 2023年9月9日 |
0.1.2 | 2023年9月5日 |
#595 in 命令行工具
47KB
965 行
(r)EJSON
rejson
是一个用于在源代码管理中管理密钥集合的工具。密钥使用 公钥、椭圆曲线 密码学 (NaCl Box: Curve25519 + Salsa20 + Poly1305-AES) 进行加密。密钥被收集在一个 JSON 文件中,其中所有字符串值都是加密的。公钥嵌入在文件中,解密器从其本地文件系统中查找对应的私钥。
这是 EJSON 的 Rust 版本,增加了一些功能。所有荣誉都应归功于制作 EJSON 的团队。这里没有创新,只是需要 Rust 绑定并且想要一些我认为不适合上游的额外功能。
安装
发布版本
curl -fsSL https://github.com/pseudomuto/rejson/releases/download/v0.2.0/rejson_0.2.0_$(uname -s)_$(uname -m).tar.gz | tar xzf -
使用 Cargo
cargoinstall rejson
由于这是一个 ejson
的直接替代品,如果您喜欢,可以添加 alias ejson="rejson"
。预期的是这与 ejson
完全兼容,并且是附加的。如果不是这样,那是一个错误,我会很感激您提交问题。
EJSON 的新增功能
- 在
decrypt
中添加了--strip-key
标志,它将从结果中删除_public_key
。 - 添加了
env
命令,该命令将导出顶级environment
键下的所有密钥。 - 添加了
kube-secrets
命令,该命令将输出位于kubernetes
键下的 K8s 密钥声明。
用法
CLI
请参阅 rejson -h
或 (cargo run -- -h
) 以获取使用说明。
A command line utility for managing secrets
Usage: rejson <COMMAND>
Commands:
encrypt Encrypt one or more EJSON files
decrypt Decrypt an EJSON file
keygen Generate a new EJSON key pair
env Export the all scalar values under the "environment" key
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
要导出环境密钥中的所有环境值,请运行 eval $(rejson env secrets.ejson)
。
{
"_public_key": "...",
"environment": {
"SOME_KEY": "SOME_VALUE"
}
}
Docker
为每个rEJSON版本发布了一个docker镜像。用法与使用二进制文件类似,只需使用加密/解密功能时需要 /keys
和 /files
卷。
# generate a new key pair
docker run --rm -it rejson keygen
# encrypt a file to disk
docker run --rm -it \
-v $(pwd)/keys:/keys \
-v $(pwd)/secrets:/files \
rejson encrypt /files/secrets.ejson
# decrypt a file to stdout
docker run --rm -it \
-v $(pwd)/keys:/keys \
-v $(pwd)/secrets:/files \
rejson decrypt /files/secrets.ejson
代码
use std::fs;
use rejson::{KeyPair, SecretsFile};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let file = "examples/data/secrets.ejson";
let mut secrets_file = SecretsFile::load(file).expect("failed to load file");
secrets_file.transform(rejson::compact()?)?;
secrets_file.transform(rejson::encrypt(&secrets_file)?)?;
let json = secrets_file.to_string();
let data = json.as_bytes();
fs::write(file, data)?;
println!("Wrote {} bytes to {}", data.len(), file);
Ok(())
}
有关更多内容,请参阅 examples 目录。
开发
本地设置
- 请确保您已安装夜间工具链(仅用于rustfmt)
- 添加pre-commit以避免提交格式不正确的代码
ln -sf ../../build/pre-commit .git/hooks/pre-commit
发布新版本
运行 build/release <new_version>
。这将
- 更新Cargo.toml中的版本
- 创建一个包含消息 "Release v" 的新提交
gittag -sm "Release v<version"v<version>
gitpush --tags
一旦发布管道完成并发布了crate,请运行以下命令以创建带有附加的二进制文件等的GitHub发布。
goreleaser release --clean
是的,我已经将goreleaser黑客成认为这是一个go项目,这样我就可以利用它来运行交叉编译、发布docker镜像和设置GitHub发布。
依赖项
~5.5–7.5MB
~130K SLoC