一行ssh不同于普通ssh的环境变量



我正在使用AWS Beanstalk,以防它可能与问题相关。

我遇到的问题是,当我从我的本地终端:

ssh mozart-api printenv

我忽略了大多数环境变量,如果我这样做:

ssh mozart-api

. .等待打开…

printenv

我得到了我所期望的所有环境变量。

一开始我以为这可能是服务器上的ssh配置,但没有发现任何奇怪的地方。

如果我这样做:

ssh mozart-api "export hello=123 && echo $hello"

则输出123,这意味着变量可以设置和查询,但是我只是无法从服务器获得现有的变量。

这会导致一个问题,因为我正在准备一个脚本,该脚本将在此服务器上运行ssh命令,但由于没有加载变量,项目无法打开数据库。

我尝试用一行重新导入它们:

ssh mozart-api "sudo chmod +777 /etc/profile.d/sh.local && (/opt/elasticbeanstalk/bin/get-config environment | jq -r 'keys[] as $k | "echo export ($k)=(.[$k])"') > /etc/profile.d/sh.local && printenv"

但是仍然看不到新添加的变量。

ssh mozart-api执行一个登录shell,它可能提供一个或多个定义环境变量的文件。

ssh mozart-api printenv执行printenv而不是登录shell的,因此您看到的唯一变量是从父进程继承的变量,而不是shell配置文件中定义的任何变量。

最新更新