Bash:使变量随处可见不是EXPORT上的问题

问题描述

我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS CodeArtifact)。当我通过CLI登录时,它设置了一个环境变量-我们称之为TOKEN。当我运行任何构建时,都需要存在TOKEN进行身份验证。

现在,登录后,建立相同的外壳程序工作,但是显然,由于TOKEN当然没有定义,因此建立新的外壳程序(不是子外壳程序)会失败。我正在寻找解决这个问题的方法;理想的解决方案是执行以下操作:

  1. 登录shell:登录后,将TOKEN保存在~/.token
  2. 所有shell:每分钟运行一些命令,将TOKEN设置为~/.token中的值

我有2个问题:

  • 这是最好的方法吗?还是还有一些更优雅的方法
  • 如果是这样,那么执行上述(2)的最佳方法是什么?

最后的收获是,这是我将分发给最终用户的机器上的东西,因此,如果它易于编写脚本,那就太好了。

提前感谢-保持安全!

解决方法

回答问题2时,问题1的解决方案很简单: 开始编写将返回令牌的函数。

TOKEN=$(get_token)

第一个实现将在不进行任何缓存或共享的情况下重新计算新令牌。

您多久需要一次令牌?如果您不是每分钟都构建一次,则不需要额外的工作(cronjob)每分钟刷新一次令牌。在这种情况下,您可以通过调用函数在每次api调用之前刷新令牌。您不需要存储或共享它。
当您确实非常需要令牌时,可以修改功能。使用文件很简单,但是您也可以使用其他解决方案,例如服务器(当您希望令牌在远程主机上可供已被其他令牌标识的用户使用时)。
下一个挑战是如何使获取新令牌的手动过程自动化。
是否可以找到不需要输入密码的方法(例如使用.aws/config或(更好)为服务器分配正确的角色)?还是您需要使用expect编写通话脚本?
API调用get-authorization-token需要codeartifact:GetAuthorizationToken和sts:GetServiceBearerToken权限。