为什么不使用 sshrc 中设置的 $PATH?

Why is $PATH set in sshrc not used?

我正在尝试在 OS X 服务器上通过 ssh 设置 svn。为此,我读到我需要一个包装器来设置 umask 并且 - 在我的例子中 - 来设置存储库根目录。一种快速而肮脏的方法是重命名 /usr/bin/svnserve 并在该位置放置一个包装脚本。但是 SIP 保护该位置免受任何更改,无论如何我更喜欢更干净的解决方案。

所以我在 /usr/local/bin/svnserve 创建了一个包装器脚本,并用

创建了 /etc/ssh/sshrc
PATH=/usr/local/bin:$PATH

我已验证在通过写入日志文件从我的客户端启动远程 ssh 命令时执行了此文件。但是,修改后的 PATH 似乎并没有传递到命令环境:

ssh hostname 'echo $PATH'
Password:
/usr/bin:/bin:/usr/sbin:/sbin

我是不是忽略了什么?还是 /etc/ssh/sshrc 设置路径的地方不对?如果是这样,正确的地方是什么?


我尝试过的其他地方:/etc/profile/etc/bashrc,但其中 none 似乎是与 ssh 命令一起执行的。

注意:这不是更改客户端行为的选项(例如,将所需路径添加到命令)。

/etc/sshrc 不会 运行 与远程发出的命令在同一个 shell 实例中,因此 PATH 更新不会持续存在。

一些可用的选项:

  • 您可以在服务器上设置 AcceptEnv PATH 以将其配置为接受远程系统发送的 PATH,并在客户端上设置 SendEnv PATH(在 ~/.ssh/config 中或作为参数使用 -o/etc/ssh/ssh_config).
  • 传递给 ssh
  • 在服务器的/etc/ssh/sshd_config中,可以将选项PermitUserEnvironment设置为yes;完成后,可以将变量和值添加到服务器上个人用户帐户中的 ~/.ssh/environment
  • 您可以使用 ForceCommand 来覆盖远程请求的命令,可以使用 /usr/bin/env PATH=/usr/local/bin:/usr/bin:/bin svnserve 之类的东西,也可以只是 /usr/local/bin/svnserve