当通过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 回答
在Debian上,标准环境通过
pam_env
(在/etc/pam.d/sshd
中)设置,它将读取/etc/environment
和/etc/security/pam_env.conf
. 您可以编辑它们,也可以在pam配置中添加另一个pam_env行,指向特定于SSH登录的环境文件 .虽然不是问题的答案,但是从this link开始,看起来ssh有自己的路径设置 .
ssh服务器set会话开始时的一些环境变量 . 您可以在ssh服务器上创建
~/.ssh/environment
文件以设置其他变量(假设服务器上有BSD openssh服务器),但必须配置服务器以允许更改环境 .如果上述操作无效,则可以设置远程命令 . 在mercurial中,这是用于推拉的
--remotecmd
开关 .我通过将所有必要的文件包含到
.bashrc
解决了这个问题例如: