![Hashicorp Vault 如何使用 Bash Shell 从 STDIN 无头登录?](https://linux22.com/image/776174/Hashicorp%20Vault%20%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Bash%20Shell%20%E4%BB%8E%20STDIN%20%E6%97%A0%E5%A4%B4%E7%99%BB%E5%BD%95%EF%BC%9F.png)
例如,给定一个在 Gitlab 上运行的 Docker 容器中的 Bash Shell,我如何获取要传递的密码?
当我用这个登录时:
$ vault login -method=ldap username=myusername
它要求我输入密码。
如何让提示不停止并将密码作为变量传递?
我计划使用 Gitlab 变量来传递我的密码。
答案1
您应该考虑使用 JWT(JSON Web Token)相互认证在 Gitlab 和 Vault 之间。这样就不需要在任何地方保存任何密码(包括变量),也就是说,您首先通过 JWT Auth 获取一个临时的 Vault 令牌,如下所示:
export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=builder jwt=$CI_JOB_JWT)"
然后您可以像这样访问必要的秘密:
export VCENTER_USER="$(vault kv get -field=username /kv/builder/vcenter-auth)"
export VCENTER_PASSWORD="$(vault kv get -field=password /kv/builder/vcenter-auth)"
完成后,您可以通过以下方式撤销此临时令牌:
vault token revoke -self
答案2
由于作者明确要求使用用户密码方法,我建议按照如下方式回答:
vault login -method=userpass username=myusername password=$userpass
其中 $userpass 是您的 gitlab 变量。
根据 CLI 实用程序的官方帮助,vault auth help userpass
没有像其他工具那样熟悉的选项,例如echo $password | docker login ghcr.io -u myusername --password-stdin