首页 文章

为SSH远程命令全局配置PATH

提问于
浏览
2

当通过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

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

  • 0

    虽然不是问题的答案,但是从this link开始,看起来ssh有自己的路径设置 .

  • 0

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

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

  • 1

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

    例如:

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

相关问题