【问题标题】:Vault Token Helper not being detected?未检测到 Vault Token Helper?
【发布时间】:2018-11-30 02:30:16
【问题描述】:

问题:

我在vault:0.10.2 docker 映像中有三个文件,位于以下位置:

/home/myuser/token_helper:Go 中的令牌助手二进制文件,根据this documentation 实现令牌助手接口

/home/myuser/vault_start:运行 os.exec("vault", "operator", "init")os.exec("vault", "server", "-config=myconfig.hcl") 的 Go 脚本

/home/myuser/.vault:指定令牌助手二进制位置的令牌助手配置文件,我已导出 VAULT_CONFIG_PATH 以指向此路径。该文件读取token_helper = "/home/myuser/token_helper"

我看到的问题是在运行 vault_start 脚本时,我收到以下错误:

failed to get token helper: error expanding config path "": exec: "getent": executable file not found in $PATH

目前已完成调试

这个错误似乎不正确。 which getent 返回/usr/bin/getent,图像$PATH 包含它,证明两者都存在。另外,配置路径不是"",而是设置为/home/myuser/.vault,但Vault显然检测为空。

我已将该错误输出跟踪到 Vault 的 command 目录中的 this file:。根据该代码块,只有在未设置 $HOME 时才会出错,但我已经确认在 shell 中设置了 $HOME

此外,我已经指定了 Vault 要求的所有内容,以便根据 this document 实现令牌助手,但它似乎没有检测到运行它的配置文件。这似乎是 Vault 的错误,还是我遗漏了什么?

【问题讨论】:

    标签: go devops alpine hashicorp-vault


    【解决方案1】:

    想通了,这是因为os.exec("vault", "operator", "init")这一行没有从主机继承VAULT_CONFIG_PATH变量设置,所以它是空的。

    下面展示了如何在运行过程中给os.Exec环境变量:

        vaultInitCmd := exec.Command("vault", "operator", "init")
        vaultInitCmd.Env = []string{
        fmt.Sprintf(`VAULT_ADDR=%s`, addr),
        fmt.Sprintf(`VAULT_CONFIG_PATH=%s`, `/home/myuser/.vault`)}
    

    【讨论】:

    • 嘿,我遇到了同样的问题,但我在 Nodejs 中执行此操作,所以基本上我正在使用 exec() 执行子进程,并且我传递了 Vault 所需的所有 env 变量,但得到与上述相同的错误。您是如何解决上述问题的,因为当我将值作为 /usr/local/bin/vault 传递时,我不确定 VAULT_CONFIG_PATH 的值,因为这是 Vault 的二进制文件,但它显示“找到非法字符,文件无效....."
    • @SOURAVKUMAR 在将环境变量传递给 exec() 之前,您是否尝试过打印 VAULT_CONFIG_PATH?如果它不为空,那么它可能是 如何 您将环境变量传递给 exec()
    • 哦,我等了这么多天才回答您的评论,还有可能会在此错误后到达这里但由于不知何故我的声誉不够而无法发表评论的任何人。因此,关于您的评论,VAULT_CONFIG_PATH 很好,实际上问题出在 HOME env 变量中,在传递给我的 exec() 方法之前它是空的,所以我将它设置为所需的路径,现在这个 getent 错误消失了,你节省了很多小时的调试。我在您的问题描述本身中找到了我的答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 2017-01-07
    • 2018-12-11
    • 2019-11-25
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多