我正在尝试在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命令一起执行。
注意:不能更改客户端行为(例如,添加命令所需的路径)。
答案 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