SSH全局$ PATH

当我login我的ArchLinux服务器并键入:

$echo $PATH I get... /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl 

但是,当我没有login,并尝试:

 ssh myyser@mysever 'echo $PATH' i get.. /usr/bin:/bin:/usr/sbin:/sbin 

PATH在我的/ etc / profile中是正确的,但ssh似乎没有加载。

有没有办法解决所有的用户/ SSH会话?

当我使用Ubuntu的时候不会发生这种情况

按照Eugene Mayevski的EldoS Corp的build议在这里发帖

如果你使用Bash作为用户的默认shell,你的ssh命令会启动一个非交互式的非loginshell,所以它不会处理/etc/profile 。 您将需要在脚本中获取该文件。

当你通过ssh运行一个命令时,它不会在远程主机上启动一个loginshell。 这样做的实际含义各不相同,但通常意味着在login时运行的shell初始化文件将被忽略。 另一方面,每个shell实例的shell初始化文件仍将被处理。

如果你使用bash ,这意味着只有你的.bashrc文件被使用。 我经常在我的.bashrc文件中join这样的内容:

 if [ ! "$RAN_PROFILE" ]; then . $HOME/.profile fi 

在我的.profile的底部:

 RAN_PROFILE=1 export RAN_PROFILE 

这确保我可以获得.profile服务,即使是非loginshell。

我解决了这个问题,将path添加到/ etc / environment中

 PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl 

不知道这是否是一个好的做法,但正在工作。

谢谢!

客户端上的shell扩展了PATHvariables,所以你需要转义美元符号。

foo$ ssh [email protected] 'echo \$PATH'