刀ssh没有加载环境变量

时间:2014-08-27 14:41:42

标签: environment-variables chef knife

在我的节点node_name上,我$JAVA_HOME设置了/etc/profile和其他环境变量。我知道(发现)knife ssh不是登录shell,因此不会加载环境变量。有没有办法加载环境变量而不必source它? 现在我被迫做了

knife ssh 'name:nod_name' 'source /etc/profile; echo $JAVA_HOME'

我在knife ssh期间链接了一些命令,其中包括一些环境变量,加载/etc/profile只会让它更长。有没有办法在刀ssh期间加载/ etc / profile?

2 个答案:

答案 0 :(得分:1)

这与刀ssh无关,它只是SSH对直接通过连接执行的命令的工作原理。您也可以运行bash -l -c "something"之类的命令。一般来说,你不能指望在非交互式会话中将env vars设置为可移植的任何特定方式,因此需要注意。

答案 1 :(得分:0)

不是OP问题的答案,而是寻找类似问题的解决方案。以为我会分享我的情况和解决方案,也许可以帮助别人。我的问题是尝试使用root的.bashrc中的awscli凭据在我们的本地服务器上远程运行Chef。为了在.bashrc中加载​​root的环境变量,-i开关是我所缺少的。

不起作用:

knife ssh "name:$NODE" "sudo /etc/init.d/appserver stop; sleep 10;sudo chef-client -r role_appserver" -A -x user -P password

曾为:

knife ssh "name:$NODE" "sudo /etc/init.d/appserver stop; sleep 10;sudo -i chef-client -r role_appserver" -A -x user -P password