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
相关产品推荐
相关产品推荐

