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



I运行以下命令:

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".

看起来env变量不可访问。然后如何加载,以便我可以通过aws CLI登录到aws?

为什么破裂

当您将$(...)放入一个双引号字符串中时,它会在该字符串被求值时运行,也就是在ssh启动之前。因此,grep命令在本地机器上运行,该机器可能没有问题文件(或者至少没有与远程副本相同的内容(。

如何避免问题

您根本不需要$(...)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'