为什么不使用 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
我正在尝试在 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