无法通过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 可能没有相关文件(或者至少没有与远程副本相同的内容)。
如何避免问题
您根本不需要 $(...)
或 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'
我运行以下命令:
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 可能没有相关文件(或者至少没有与远程副本相同的内容)。
如何避免问题
您根本不需要 $(...)
或 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'