我们希望通过 OpenSSH 在一些 Linux 主机之间发送文件,但我们不希望客户端能够列出/检索/修改服务器上的现有文件。
换句话说,它应该是一个通过 ssh 协议工作的“仅上传”服务。当然,这意味着客户端总有办法知道服务器上是否已经有给定名称的文件,只要无法检索文件内容,那就没问题。
我们如何才能实现这一点,可能使用常见发行版中现有的软件吗?
答案1
我们当前的部分解决方案利用rsync --ignore-existing
并强制在服务器端使用如下(不可写)命令行~/.ssh/authorized_keys
:
command="rsync --server -e.Ls --ignore-existing . ." ssh-ed25519 ABCDEDFGfoobarbaz user@host
- 足以阻止普通用户下载远程文件
- 如果客户端使用
rsync -r --ignore-existing <single_file> user@server:
而不是rsync -r --ignore-existing <whole_directory> user@server:
- 不能 100% 确定是否存在其他缺陷或规避预期用途的方法
- 额外的好处:rsync 无处不在,并且有方便的
--bwlimit
选项
所以我们只完成了一半,这并不是一个真正的、完整的解决方案。