我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS CodeArtifact(。当我通过CLI登录时,它会设置一个环境变量——让我们称之为TOKEN
。当我运行任何构建时,它都需要存在TOKEN
来进行身份验证。
现在,登录后,同一shell中的构建可以工作,但很明显,新shell(不是子shell(中的构建会失败,因为TOKEN
当然没有定义。我正在寻找解决这个问题的方法;理想的解决方案是这样做的:
- 登录shell:登录后,将
TOKEN
保存在~/.token
中 - 所有shell:每分钟运行一次,将
TOKEN
设置为~/.token
中的值
我有两个问题:
- 这是最好的方式吗?还是有更优雅的东西
- 如果是这样的话,做上述(2(的最佳方法是什么
最后的问题是,这是我将在最终用户的机器上分发给他们的东西,所以如果它易于编写脚本,那就太好了。
提前感谢-保持安全!
当问题2得到回答时,问题1的解决方案很简单:开始编写将返回令牌的函数。
TOKEN=$(get_token)
第一个实现将在没有任何缓存或共享的情况下重新计算新令牌。
您多久需要一次代币?如果不是每分钟构建一次,则不需要每分钟刷新一次令牌的额外作业(cronjob(。在这种情况下,您可以通过调用函数在每次api调用之前刷新令牌。您不需要存储或共享它。
当您经常需要TOKEN时,您可以修改函数。使用文件是直接的,但您也可以使用另一种解决方案,如服务器(当您希望在远程主机上为已使用其他令牌标识的用户提供令牌时(
下一个挑战是如何自动化获取新令牌的手动过程
您能找到一种不需要输入密码的方法吗(比如使用.aws/config
或(更好(为服务器分配正确的角色(?还是需要使用expect
编写呼叫脚本
neneneba API调用get-authorization-token需要codeartifact:GetAuthorizationToken和sts:GetServiceBearerToken权限。