无法通过ssh从文件加载环境变量

Unable to load environment variables from file over ssh

我运行以下命令:

ssh -i ${SSH_KEY_PATH} ${SSH_SERVER_URI} "export $(grep -v '^#' /home/ubuntu/code/.env.prod | xargs -d '\n') && aws ecr get-login --region eu-central-1"

并出现以下错误:

Unable to locate credentials. You can configure credentials by running "aws configure".

看起来环境变量不可访问。那么如何加载以便我可以通过 AWS CLI 登录 aws?

为什么坏了

当您将 $(...) 放在双引号字符串中时,在评估该字符串时它是 运行,即 before ssh 启动。因此,您本地计算机上的 grep 命令 运行s 可能没有相关文件(或者至少没有与远程副本相同的内容)。

如何避免问题

您根本不需要 $(...)xargsexport。使用 set -a 使所有变量自动导出,然后获取您的文件,完成后使用 set +a 关闭自动导出:

ssh -i "$SSH_KEY_PATH" "$SSH_SERVER_URI" \
  'set -a; . /home/ubuntu/code/.env.prod; aws ecr get-login --region eu-central-1'