如何从aws-vault exec获取AWS凭证并写入文件?命令返回空值问题
解决aws-vault exec输出AWS凭证为空的问题
问题原因
你执行的命令aws-vault exec default -- echo ${AWS_ACCESS_KEY_ID}中,${AWS_ACCESS_KEY_ID}会被当前终端的shell优先解析,而当前环境中并没有这个变量,所以解析后变成空字符串,再传给aws-vault执行,自然输出为空。
解决方法
要让变量在aws-vault创建的凭证环境中被解析,需要避免本地shell提前替换变量,下面是几种可行的方式:
1. 通过bash -c执行命令
让aws-vault启动一个bash子shell,在子shell中解析变量并执行命令:
aws-vault exec default -- bash -c 'echo $AWS_ACCESS_KEY_ID'
这样就能正确输出对应的访问密钥ID。
2. 转义美元符号
通过反斜杠转义变量的美元符号,阻止本地shell解析:
aws-vault exec default -- echo \${AWS_ACCESS_KEY_ID}
将凭证存储到文件
如果要把AWS凭证(包括访问密钥、密钥和会话令牌)保存到文件中,可以用以下命令:
aws-vault exec default -- bash -c 'cat > aws_credentials.env <<EOF AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN EOF'
执行后,当前目录会生成aws_credentials.env文件,包含完整的临时凭证信息。
也可以单独导出某个凭证到文件:
# 导出访问密钥ID到文件 aws-vault exec default -- bash -c 'echo $AWS_ACCESS_KEY_ID > access_key.txt' # 导出密钥到文件 aws-vault exec default -- bash -c 'echo $AWS_SECRET_ACCESS_KEY > secret_key.txt'
内容的提问来源于stack exchange,提问作者Stoyan Georgiev
相关产品推荐
相关产品推荐

