我想运行一个脚本来处理在收到后立即通过特定目录中的scp协议接收到的每个文件。如何在从scp收到文件后运行脚本
我不想汇集那个目录,为了避免试图处理部分收到的文件。这也是防止我使用inotify工具(https://github.com/rvoicilas/inotify-tools/wiki)的问题,我想,因为我无法知道文件在成功传输后是否被关闭,或者它是否被提前关闭
我想运行一个脚本来处理在收到后立即通过特定目录中的scp协议接收到的每个文件。如何在从scp收到文件后运行脚本
我不想汇集那个目录,为了避免试图处理部分收到的文件。这也是防止我使用inotify工具(https://github.com/rvoicilas/inotify-tools/wiki)的问题,我想,因为我无法知道文件在成功传输后是否被关闭,或者它是否被提前关闭
如果你没有访问客户端(我以前的答案),你可以使用ForceCommand选项,例如配置服务器:
ForceCommand $SSH_ORIGINAL_COMMAND && run_script.sh
但这不是failproof,它会破坏正常的ssh连接它更像是黑客...
这个看起来很有趣。我会尽快尝试一下,看看我能不能做到 – Vitor
没有这样的用纯粹的scp来这样做。我会建议使用命令,这样在一些SSH级处理的:
cat local_file | ssh [email protected] "tee > /path/to/remote_file && run_script.sh"
如果您有机会获得客户端,它是这样做的最简单的方法。基本上scp没有做任何比这更复杂的事情,但它被封装在一个很好的小命令中。
这是可能的,这是一个很好的黑客攻击,但很难建立。
您必须在scp中使用未公开的选项:-f和-t(请参阅scp.c)。
在远程服务器,接收scp命令:
对于获取文件,这样的shell脚本代替-t由-f
我目前的工作,这是多年以来一直很好。
关于这些选项的更多信息: https://lists.gt.net/openssh/dev/41493?do=post_view_threaded https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works
也许你还需要转移的校验文件,以验证收到的文件是完整的。 –
在我的情况下不可能,因为我无法控制将启动传输的一方 – Vitor
如果您想要一个不是破解的解决方案,您应该查看一个商用SSH/SCP/SFTP服务器。 – Kenster