2014-08-27 109 views
0

在我的节点node_name我得到$JAVA_HOME/etc/profile中设置的其他环境变量。我知道(发现)knife ssh不是登录shell,所以不加载环境变量。有没有办法加载环境变量而不必source呢? 现在,我不得不做刀ssh不加载环境变量

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

我在knife ssh链中的几个命令,包括一些环境变量,并装载/etc/profile只是让更长。有没有办法在刀ssh中加载/ etc/profile?

+0

这是与远程节点的外壳配置的问题。如果你没有用刀将SSH连接到远程节点,你将面临同样的问题。 – 2014-08-27 14:56:28

+0

您究竟如何解决该节点的shell配置呢? – absessive 2014-08-27 15:02:29

回答

1

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

0

对于OP的问题并不是真正的答案,而是在寻找类似问题的解决方案。以为我会分享我的情况和解决方案,或许可以帮助某人。我的问题是试图通过root的.bashrc中的awscli凭据在我们的内部服务器上远程运行Chef。 -i开关是我为了在.bashrc中加载​​根环境变量而丢失的。

没有工作:

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