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

Scala执行curl从Vault拉取密码时--insecure参数不生效报错求助

问题核心原因

你遇到的exit code 60是curl证书校验失败的标准错误码,根本原因是你的Scala代码中curl参数拼接逻辑错误,--insecure参数完全没有被curl识别到,具体问题如下:

  • 你将--request POST、--insecure这些独立的curl执行参数错误放入了-H(请求头参数)的取值中,curl会将这部分内容识别为自定义请求头,不会当做执行参数处理
  • 重复声明了--data和-d两个传参参数,属于冗余错误
  • 第二个拉取机密的curl命令cmd2也未添加--insecure参数,即使第一个请求修复后第二个请求仍会触发证书校验错误

修正后的代码

import org.json.JSONObject
import sys.process._

val jsonBody = new JSONObject()
jsonBody.put("role_id", "xxxx-xx-xx-xx-xxxx")
jsonBody.put("secret_id", "xxx-xx-xx-xx-xxxx")

println("json" + jsonBody)
// 每个curl独立参数单独作为Seq的一个元素
val tokenCmd = Seq(
  "curl",
  "--request", "POST",
  "--insecure",
  "--data", jsonBody.toString,
  "https://vault.us-west-2.shared-lab.aws.hcom/v1/auth/approle/login"
)

val tokenExtractor = tokenCmd.!!
println("y is " + tokenExtractor)
// 替换硬编码下标截取,用JSON解析取token更稳定
val tokenJson = new JSONObject(tokenExtractor)
val VAULT_TOKEN = tokenJson.getJSONObject("auth").getString("client_token")
println("token " + VAULT_TOKEN)

// 第二个请求也需要加--insecure跳过证书校验
val cmd2 = Seq(
  "curl",
  "--insecure",
  "-H", s"X-Vault-Token: ${VAULT_TOKEN}",
  "https://vault.us-west-2.shared-lab.aws.hcom/v1/xxx/xxx/xxx"
)
val secretResult = cmd2.!!

补充说明

  • 用Seq执行shell命令时,每一个独立的命令行参数必须单独作为Seq的一个元素,不要将多个参数拼接进同一个字符串,否则shell不会自动拆分参数,会导致参数识别错误
  • 硬编码下标截取token的方式非常不稳定,只要Vault返回的JSON格式发生变化(比如字段顺序调整、新增字段)就会报错,建议用JSON库直接解析取值

内容的提问来源于stack exchange,提问作者Chirag Karnawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:01