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
命令在本地机器上运行,该机器可能没有问题文件(或者至少没有与远程副本相同的内容(。
如何避免问题
您根本不需要$(...)
、xargs
或export
。使用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'