2015-06-29 92 views
0

我想运行一个脚本来处理在收到后立即通过特定目录中的scp协议接收到的每个文件。如何在从scp收到文件后运行脚本

我不想汇集那个目录,为了避免试图处理部分收到的文件。这也是防止我使用inotify工具(https://github.com/rvoicilas/inotify-tools/wiki)的问题,我想,因为我无法知道文件在成功传输后是否被关闭,或者它是否被提前关闭

+0

也许你还需要转移的校验文件,以验证收到的文件是完整的。 –

+0

在我的情况下不可能,因为我无法控制将启动传输的一方 – Vitor

+0

如果您想要一个不是破解的解决方案,您应该查看一个商用SSH/SCP/SFTP服务器。 – Kenster

回答

1

如果你没有访问客户端(我以前的答案),你可以使用ForceCommand选项,例如配置服务器:

ForceCommand $SSH_ORIGINAL_COMMAND && run_script.sh 

但这不是failproof,它会破坏正常的ssh连接它更像是黑客...

+0

这个看起来很有趣。我会尽快尝试一下,看看我能不能做到 – Vitor

1

没有这样的用纯粹的scp来这样做。我会建议使用命令,这样在一些SSH级处理的:

cat local_file | ssh [email protected] "tee > /path/to/remote_file && run_script.sh" 

如果您有机会获得客户端,它是这样做的最简单的方法。基本上scp没有做任何比这更复杂的事情,但它被封装在一个很好的小命令中。

1

这是可能的,这是一个很好的黑客攻击,但很难建立。

您必须在scp中使用未公开的选项:-f和-t(请参阅scp.c)。

在远程服务器,接收scp命令:

    在/ etc /密码,您必须更换由一个shell脚本
  1. shell脚本/斌/庆典已经从客户端获得接收到的参数(见
  2. 要发送的文件你transfering特殊参数$ @)
  3. 在shell脚本,你选择目录
  4. 在shell脚本执行SCP -r -t -p在SCP码/新/目录下,-t初始化iamremote允许从当前连接转移的变量。
  5. 在shell脚本后,该执行某些操作,或不
  6. 出口

对于获取文件,这样的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