Linux 为SSH远程命令全局配置路径

Linux 为SSH远程命令全局配置路径,linux,git,mercurial,ssh,Linux,Git,Mercurial,Ssh,通过SSH执行命令时,Debian Linux上的PATH变量有问题。例如,当我使用GIT或Mercurial并将它们安装在/opt而不是/usr/local中时,就会发生这种情况。但我也可以像这样轻松地复制: 当我以正常方式通过SSH登录到服务器,然后执行echo$PATH时,我会得到我在/etc/profile中配置的路径: /usr/local/bin:/usr/bin:/bin:/usr/games:/opt/maven/bin:/opt/ant/bin:/opt/mercurial/b

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

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

/usr/local/bin:/usr/bin:/bin:/usr/games:/opt/maven/bin:/opt/ant/bin:/opt/mercurial/bin:/opt/git/bin 当我将GIT或Mercurial与ssh URL一起使用时,也会发生同样的情况。它在服务器上找不到hg或git可执行文件,因为它没有从/etc/profile获取路径


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

虽然不是问题的答案,但从中看,SSH似乎有自己的路径设置

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


如果上述操作不起作用,可以设置远程命令。在mercurial中,这是用于推拉的
--remotecmd
开关。

在Debian上,标准环境是通过
pam_env
(在
/etc/pam.d/sshd
中)设置的,它将读取
/etc/environment
/etc/security/pam_env.conf
。您可以编辑这些内容,或者在pam配置中添加另一个pam_env行,指向特定于SSH登录的环境文件。

我通过将所有必要的文件包括到
.bashrc
中解决了这个问题

例如:

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

我想这些信息已经过时了(13年前)。我没有重复的/usr/bin,SSH默认路径中有/usr/bin/X11。但不管怎样,我在sshd手册页中找不到任何关于路径的提示。所以,也许这真的是一条“固定”(硬编码)的路径,就像这本古老的指南中提到的那样。或者这个路径是从其他地方读取的。我浏览了整个/etc目录,但除了/etc/profile之外找不到任何内容。我将使用/usr/local/bin中的符号链接作为解决方法。它实际上是相对干净的,并且避免了只修改一个或两个可执行文件的路径(例如/opt/mercurial/bin)。对于mercurial,您可以在
.hg/hgrc
文件或一些更全局的配置文件中将
ui.remotecmd
设置为
/opt/mercurial/bin/hg
。这将使Mercurial将该命令用作远程
hg
命令。
. /etc/profile.d/rvm.sh
. /etc/profile.d/bash_completion.sh