我如何限制某些文件扩展名通过SSH上传?

我怎样才能通过SSH限制某些文件扩展名和file upload大小?

我使用Ubuntu 12.10默认安装和Open-ssh服务器。

OpenSSH本身并不具备这些function,尽pipe你可能会用商业产品(CrushFTP,Linoma或梭子鱼)想到这一点。

如果您想要将内容过滤应用于上传,您可以通过允许用户上传到传入的后台打印机,并定期扫描并将已批准的内容移动到输出的后台打印机来执行此操作,这也适用于A / V扫描。 incron应该帮助这个。 如果你的目的是节省带宽,文件大小 scp协议的一部分,这将不能有效地进行基于大小的上传,这需要客户端提供build议,但不一定要遵守文件大小。


更新:由于OpenSSH允许将sftp服务器委派给外部进程(通过sshd_config Subsystem ),您可以实现自己的SFTP服务器。 perl Net::SFTP:SftpServer模块是一个完整的实现,并且文档有一个工作示例(确保安装所有依赖项,正确设置syslog以logging日志,并且如果不将该脚本设置为用户的shell)。

它具有可configuration的最大文件大小设置,并支持文件传输事件的callback函数,允许您检查文件名(和内容) – 虽然callback只在传输完成后才被调用。

你可以makeSafeFileName()函数以添加文件名条件,它已经有一个(可configuration的)正则expression式testing用于有效的文件名(尽pipe注意这适用于包括目录在内的所有名字)。 或者,在处理文件的函数processOpen()添加$filename的额外testing(可能更好)。

您可以使用Subsystem sftp ...sshd_config全局启用它,或者您可以通过ForceCommand有select地将其用于一组用户:

 Match Group sftplimited ForceCommand /usr/local/bin/sftp-server.pl