自动进行scp文件传输-在Synology DS和dd-wrt路由器之间

时间:2019-04-25 13:22:48

标签: bash automation scp synology dd-wrt

摘要::我正在寻找一个bash脚本,以将单个文件从Synology DS传输到dd-wrt路由器(Netgear WNR3500Lv1)。

问题:路由器仅允许我写入/tmp文件夹,该文件夹在重启后将被删除。与其检查路由器是否重新启动,不如我每天早晨自动将文件(“主机”)推送到它。

无效的解决方案:之前,有人问过类似的问题(Automate scp file transfer using a shell script),但是没有一个答案对我有用。 Synology DS中的外壳没有必需的命令:expectspawninteractsshpass。它确实有rsync,但路由器没有它。

使用SSH密钥的解决方案对我也不起作用,因为我无法将任何内容永久写入路由器->因此,重新启动后,安装程序就消失了。

问题:是否可以将所需命令添加到DS Shell?或者是一种更简单的方式来完成此操作-这样它可以自动发生而无需提示输入密码?

1 个答案:

答案 0 :(得分:0)

对于Synology DSM有限的Linux bash,这似乎是不可能的。但是,事实证明scp可以使用Python自动执行。

我将问题How to scp in python?中的代码与该线程中的脚本https://unix.stackexchange.com/questions/276336/automatically-enter-ssh-password-without-using-ssh-key-expect-sshpass-or-p结合在一起,然后使用本指南https://forum.synology.com/enu/viewtopic.php?t=141745

将其自动化

结果,我有以下Python脚本:

import os
def run():
    pid, fd = os.forkpty()
    if pid==0:
        os.system('scp "%s" "%s:%s"' % ('myfile.txt', 'user@domain.com', 'path') )
    while True:
        data = os.read(fd,1024)
        print data
        if "password:" in data:    # ssh prompt
            os.write(fd,"mypassword\n")
        elif "100%" in data:  # upload done
            os.write(fd,"echo hello\n")
            os.write(fd,"echo bye\n")
            os.write(fd,"exit\n")
            os.close(fd)

run()

这可以完成工作,但是它总是以OSError: [Errno 9] Bad file descriptor退出。