如何在GitHub Actions中通过Secret向SnowSQL传递p8私钥
根因说明
--private-key-path参数要求传入的是本地密钥文件的存储路径,但你当前直接把GitHub Secret里存储的p8密钥内容字符串传给了该参数,SnowSQL尝试把密钥内容当作路径去读取,自然会抛出路径不存在的错误。你之前把路径写在配置文件里时正常,就是因为配置文件里填的是已存在的.p8文件的实际路径。
解决方法
你只需要先把Secret中存储的密钥内容临时写入一个本地文件,再将该文件路径传给SnowSQL即可,具体操作如下:
- 在调用snowsql的入口点脚本中,先创建临时密钥文件并设置正确权限:
# 定义临时密钥文件路径 TEMP_KEY_FILE="/tmp/snowsql_private_key.p8" # 将GitHub Secret传入的密钥内容写入临时文件 echo "${INPUT_SSQL_PRIVATE_KEY}" > "${TEMP_KEY_FILE}" # 收紧文件权限,避免SnowSQL报权限错误(要求仅所有者可读) chmod 600 "${TEMP_KEY_FILE}"
- 修改snowsql调用命令,将
--private-key-path参数的值替换为上述临时文件的路径:
snowsql -f ${INPUT_QUERY_FILE} \ -o quiet=true \ -o friendly=false \ -o header=false \ --private-key-path="${TEMP_KEY_FILE}" \ --config ${INPUT_SSQL_CONFIG_FILE}
- 可选操作:执行完查询后删除临时密钥文件,避免泄露风险:
rm -f "${TEMP_KEY_FILE}"
补充说明
如果你的加密私钥设置了口令,需要同时将口令存储为GitHub Secret,再通过以下任意一种方式传入即可:
- 调用snowsql时追加参数
--private-key-passphrase="${你的口令变量}" - 提前设置环境变量
export SNOWSQL_PRIVATE_KEY_PASSPHRASE="${你的口令变量}" - 写入到snowsql的配置文件对应字段中
内容的提问来源于stack exchange,提问作者user14328853
相关产品推荐
相关产品推荐

