在通过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。
答案 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