【发布时间】:2022-01-18 07:01:20
【问题描述】:
我运行以下命令:
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?
【问题讨论】:
-
当您将字符串放在双引号中时,
$(...)会在本地而非远程主机上执行。 -
另外,您根本不需要命令替换。
ssh ... 'set -a; . /home/ubuntu/code/.env.prod; set +a; aws ecr get-login --region eu-central-1你就完成了 -
顺便说一句,shell 本身使用全大写变量名。理想情况下,您自己的名称应在保留给应用程序使用的命名空间中至少包含一个小写字符,并保证不会对符合 POSIX 的外壳或其他工具产生意外的副作用——请参阅pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,请记住设置 shell 变量会覆盖任何类似命名的环境变量(因此相同的命名约定必须适用于两者,至少在 shell 名称的命名空间内)。
-
另外,请注意
${var}与$var没有什么不同,除非您需要参数化扩展名或消除部分变量名的尾随字符的歧义,这两种情况都不是。如果您想添加额外的字符以使您的脚本更正确,这些字符应该是 双引号,它指示 shell 禁用字符串拆分和全局扩展(所以"$var"或"${var}") .
标签: bash amazon-web-services ssh