0

我正在使用 AWS SSM Run Command 和 AWS-RunShellScript 文档在 AWS Linux 1 实例上运行脚本。部分脚本包括使用环境变量。当我自己运行脚本时,一切都很好。但是当我用 SSM 运行脚本时,它看不到环境变量。此变量需要传递给 Python 脚本。我最初一直在尝试 os.environ['VARIABLE'] 没有效果。

我知道 AWS SSM 使用 root 权限,所以我在根 ~/.bashrc 文件中放了一行导出变量,但它仍然看不到变量。当我自己运行它时,root用户可以看到它。AWS SSM 无法使用环境变量,还是我没有正确导出它?如果不可能,我将尝试使用 AWS KMS 来存储我的变量。

~/.bashrc

export VARIABLE="VALUE"

脚本.sh

"$VARIABLE"

安全性很重要,因此我不想只将变量存储在脚本中。

4

2 回答 2

5

SSM 不会打开实际的 SSH 会话,因此无法传递环境变量。在盒子上运行一个守护进程来接收您的请求并处理它们是必不可少的。这是一个非常基本的产品:它不支持 SSH 附带的任何标准功能,例如 SCP、端口转发、隧道、传递 env 变量等。将您需要的值传递给脚本的另一种方法是将其存储在 AWS Systems Manager Parameter Store中,并让您的脚本从存储中提取变量。
您需要更新您的实例角色权限才能访问ssm:GetParameters您运行的脚本以访问存储的值。

于 2019-04-11T04:49:24.377 回答
0

我在我的 SSM 命令文档中运行 bash 脚本,所以我只是获取配置文件/脚本以使 env 变量准备好供后续命令使用。例如,

"runCommand": [
      "#!/bin/bash",
      ". /tmp/setEnv.sh",
      "echo \"myVar: $myVar, myVar2: $myVar2\""
]

你可以参考一个shell脚本可以设置调用shell的环境变量吗?用于采购您的环境变量。对于 python,您必须解析源配置文件/脚本,请参阅Emulating Bash 'source' in Python

于 2021-03-26T18:33:04.957 回答