为SSH远程命令全局配置PATH

时间:2010-10-29 06:16:19

标签: linux git mercurial ssh

在通过SSH执行命令时,Debian Linux上的PATH变量出现问题。这种情况发生在例如我使用GIT或Mercurial时,我将它们安装在/ opt而不是/ usr / local中。但我也可以像这样轻松地重现这个:

当我以正常方式通过SSH登录服务器然后执行echo $PATH时,我获得了在/ etc / profile中配置的PATH:

/usr/local/bin:/usr/bin:/bin:/usr/games:/opt/maven/bin:/opt/ant/bin:/opt/mercurial/bin:/opt/git/bin

但是当我做ssh user@server 'echo $PATH'时,我得到了这个:

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

当我使用带有ssh URL的GIT或Mercurial时也会发生同样的情况。它无法在服务器上找到hg或git可执行文件,因为它没有从/ etc / profile获取PATH。

所以问题是:是否有一种“更全局”的方式来配置PATH,所以它也适用于SSH远程执行?不能选择为每个用户配置PATH。在客户端上使用git / hg时指定git / hg可执行文件的完整路径也不是一种选择。而且我知道我可以在/ usr / local / bin中使用符号链接或包装脚本来使其正常工作,但是当我通过SSH远程执行命令时,我正在明确搜索是否有正确的PATH。

4 个答案:

答案 0 :(得分:1)

在Debian上,标准环境是通过pam_env/etc/pam.d/sshd)设置的,其中会显示/etc/environment/etc/security/pam_env.conf。您可以编辑它们,也可以将另一个pam_env行添加到pam配置中,指向特定于SSH登录的环境文件。

答案 1 :(得分:0)

虽然不能解决您的问题,但从this link开始,看起来ssh的路径设置就是自己的。

答案 2 :(得分:0)

ssh服务器set会话开始时的一些环境变量。您可以在ssh服务器上创建一个~/.ssh/environment文件来设置其他变量(假设服务器上有一个BSD openssh服务器),但必须配置服务器以允许更改环境。

如果上述方法无效,您可以设置远程命令。在mercurial中,这是推动和拉动的--remotecmd开关。

答案 3 :(得分:0)

我通过将所有必要的文件包含到.bashrc

来解决了这个问题

例如:

. /etc/profile.d/rvm.sh
. /etc/profile.d/bash_completion.sh