SSH 全局 $PATH

SSH 全局 $PATH

当我登录我的ArchLinux服务器和类型:

$echo $PATH
I get...
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

但是当我未登录并尝试时:

ssh myyser@mysever 'echo $PATH'
i get..
/usr/bin:/bin:/usr/sbin:/sbin

我的 /etc/profile 中的 PATH 是正确的,但是 ssh 似乎没有加载它。

有什么办法可以修复所有用户/ssh 会话的问题吗?

当我使用 ubuntu 时不会发生这种情况

根据建议在此处发布尤金·马耶夫斯基‘EldoS 公司

答案1

如果您使用 Bash 作为用户的默认 shell,则您的ssh命令将启动非交互式非登录 shell,因此它不会处理/etc/profile。您需要在脚本中获取该文件。

答案2

当您通过 运行命令时ssh,它不会在远程主机上启动登录 shell。这方面的实际影响各不相同,但通常意味着运行的 shell 初始化文件登录时将被忽略。另一方面,每个 shell 实例的 shell 初始化文件仍将被处理。

如果您使用的是bash,则意味着仅使用您的文件。我经常在我的文件.bashrc中放入类似这样的内容:.bashrc

if [ ! "$RAN_PROFILE" ]; then
  . $HOME/.profile
fi

在我的底部.profile

RAN_PROFILE=1
export RAN_PROFILE

这确保了我.profile甚至可以使用非登录 shell 获得服务。

答案3

我修复了这个问题,将路径添加到/etc/环境

PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/core_perl

不知道这是否是一个好的做法,但确实有效。

谢谢你!

答案4

客户端上的 shell 扩展了 PATH 变量,因此您需要转义美元符号。

foo$ ssh [email protected] 'echo \$PATH'

相关内容