在我的节点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?
答案 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