如何用jq将Vault证书请求响应拆分至两个文件?
拆分Vault PKI证书请求响应到不同文件的正确方法
你可以通过以下两种方式实现需求,一次请求Vault即可完成拆分,避免重复调用:
方法1:单次jq调用同时生成两个文件
这种方式最高效,只需要向Vault发起一次请求,通过jq内部的输出逻辑直接写入两个文件:
vault write -format=json pki_int/issue/example-dot-com \ common_name="test.example.com" \ ttl="24h" \ format=pem | jq -r ' # 将certificate和issuing_ca合并写入证书文件(自动换行) .data.certificate, .data.issuing_ca > "test.cert.pem"; # 将private_key写入私钥文件 .data.private_key > "test.key.pem" '
方法2:先保存原始响应,再分别提取
如果需要保留Vault的原始JSON响应,可以先把结果存到临时文件,再分两次提取内容:
# 保存完整的JSON响应 vault write -format=json pki_int/issue/example-dot-com \ common_name="test.example.com" \ ttl="24h" \ format=pem > vault_response.json # 提取证书和签发CA到test.cert.pem jq -r '.data.certificate, .data.issuing_ca' vault_response.json > test.cert.pem # 提取私钥到test.key.pem jq -r '.data.private_key' vault_response.json > test.key.pem
你之前命令的问题说明
- 命令换行错误:多行shell命令需要用
\结尾来连接,否则shell会认为命令提前终止。 - 管道与重定向逻辑错误:第一次jq的输出被重定向到文件后,第二次jq会没有输入数据;而且你没有用
|正确连接vault命令和jq。 - jq语法错误:输出重定向的写法不符合jq规范,需要在jq脚本内部处理文件写入,或者通过shell的进程替换来实现。
内容的提问来源于stack exchange,提问作者Broski-AC
相关产品推荐
相关产品推荐

