You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全向命令行工具传递凭证,避免泄露至ps输出?

避免Cloudflare API密钥在ps输出中泄露的临时方法

问题背景

执行以下curl命令调用Cloudflare API时:

curl -s 'https://api.cloudflare.com/client/v4/zones/{zone_identifier}/logpush/jobs' \
-H "X-Auth-Email: carl@example.com" \
-H "X-Auth-Key: abc123"

密钥abc123会在Shell历史记录、终端输出、ps命令输出三处泄露。即使改用$(pass show cloudflare-api-key)替换硬编码密钥,密钥仍会出现在ps输出中,存在被本地进程窃取的风险。

实用解决方案

以下几种临时方法可避免密钥出现在ps输出中:

1. 环境变量传递(推荐)

通过环境变量传递密钥,子进程会继承环境变量但ps不会显示进程的环境变量内容:

# 方式1:临时设置环境变量,仅当前shell会话有效
CF_API_KEY=$(pass show cloudflare-api-key)
curl -s 'https://api.cloudflare.com/client/v4/zones/{zone_identifier}/logpush/jobs' \
-H "X-Auth-Email: carl@example.com" \
-H "X-Auth-Key: $CF_API_KEY"

若不想污染当前shell环境,可使用子shell一次性执行:

# 方式2:子shell执行,环境变量仅在该命令生命周期内有效
CF_API_KEY=$(pass show cloudflare-api-key) curl -s 'https://api.cloudflare.com/client/v4/zones/{zone_identifier}/logpush/jobs' \
-H "X-Auth-Email: carl@example.com" \
-H "X-Auth-Key: $CF_API_KEY"

2. 进程替换传递

利用进程替换读取密钥,避免密钥出现在命令参数中:

curl -s 'https://api.cloudflare.com/client/v4/zones/{zone_identifier}/logpush/jobs' \
-H "X-Auth-Email: carl@example.com" \
-H "X-Auth-Key: $(< <(pass show cloudflare-api-key))"

3. 临时curl配置文件

创建仅自己可读的临时配置文件,用完立即删除:

# 生成临时配置文件
cat > /tmp/cf_api_config.tmp << EOF
X-Auth-Email: carl@example.com
X-Auth-Key: $(pass show cloudflare-api-key)
EOF
# 限制文件权限,避免其他用户读取
chmod 600 /tmp/cf_api_config.tmp
# 调用API
curl -s 'https://api.cloudflare.com/client/v4/zones/{zone_identifier}/logpush/jobs' --config /tmp/cf_api_config.tmp
# 清理临时文件
rm /tmp/cf_api_config.tmp

内容的提问来源于stack exchange,提问作者Carl Patenaude Poulin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:55:07