使用 rssh 限制私有 apt 存储库 - 为什么 apt-get 尝试 /bin/sh?

rel*_*let 5 shell ssh apt repository

我正在尝试通过 ssh 设置一个私有存储库。我的sources.list.d/包含条目

deb ssh://user@host:/repo ./ 
Run Code Online (Sandbox Code Playgroud)

user 是主机上的仅证书帐户。apt-get update工作正常。

但是,我想限制对下载存储库的访问,即禁用外壳访问。如果我将用户 shell 设置为 rssh,仅允许 scp 和 sftp,则更新会中断。

来自/var/log/syslog

user user attempted to execute forbidden commands
command: /bin/sh
Run Code Online (Sandbox Code Playgroud)

为什么 apt 需要在存储库机器上访问 shell,有没有办法避免这种情况?

我注意到有一个 apt-transport-sftp 的 github 存储库,我可能会查看它,但为了用户方便,我宁愿坚持使用更常见的包。

cuo*_*glm 1

你没有办法避免这种情况。

使用默认的 ssh 方法,apt需要登录到远程服务器,调用/bin/sh以获取 shell 访问权限,并使用一些 GNU 实用程序(例如find, )进行一些工作dd

apt源代码证实了这一点:

 157       Args[i++] = "/bin/sh";
 158       Args[i] = 0;
 159       execvp(Args[0],(char **)Args);
 160       exit(100);
Run Code Online (Sandbox Code Playgroud)

(令人惊讶的是apt仍然使用findwith-follow选项,该选项标记为已弃用)