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

时间:2017-03-10 18:26:00

标签: linux svn ssh bsd osx-server

我正在尝试在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,但这些似乎都没有与ssh命令一起执行。

注意:不能更改客户端行为(例如,添加命令所需的路径)。

1 个答案:

答案 0 :(得分:0)

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

一些可用选项:

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