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

Bash 自动化scp文件传输-在Synology DS和dd wrt路由器之间,bash,automation,scp,synology,dd-wrt,Bash,Automation,Scp,Synology,Dd Wrt,摘要:我想设置一个bash脚本,将单个文件从Synology DS传输到dd wrt路由器(Netgear WNR3500Lv1) 问题:路由器只允许我写入/tmp文件夹,该文件夹在重新启动后被擦除。我不想检查路由器是否重新启动,而是希望每天早上自动将文件(“主机”)推送到路由器 无效的解决方案:之前有人问过类似的问题(),但没有一个答案对我有效。Synology DS中的shell没有必需的命令:expect、spawn、interact或sshpass。它有rsync,但路由器没有 带有SS

摘要:我想设置一个bash脚本,将单个文件从Synology DS传输到dd wrt路由器(Netgear WNR3500Lv1)

问题:路由器只允许我写入
/tmp
文件夹,该文件夹在重新启动后被擦除。我不想检查路由器是否重新启动,而是希望每天早上自动将文件(“主机”)推送到路由器

无效的解决方案:之前有人问过类似的问题(),但没有一个答案对我有效。Synology DS中的shell没有必需的命令:
expect
spawn
interact
sshpass
。它有
rsync
,但路由器没有

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


问题:是否有办法将所需命令添加到DS shell?或者可能是一种更简单的方法来实现这一点——这样它就可以在不提示输入密码的情况下自动发生?

在Synology DSM有限的linux bash中,这似乎是不可能的。然而,事实证明,
scp
可以使用Python实现自动化

我已将此问题中的代码与此线程中的脚本组合在一起,然后使用以下指南将其自动化:

因此,我有以下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]错误的文件描述符退出

问题是如何复制文件或如何自动复制?@Poshi-如标题所示:如何自动复制您可以设置cron作业吗?我认为他们是你最好的选择。只需从cron以您需要的频率启动一个copy命令(或包含您选择的copy命令的脚本)
cron
将负责自动启动它,这是它的工作:-)这是XY问题。真正的问题是如何在不使用expect、spawn interact或sshpass的情况下自动登录到ssh。复制?或者,真正的问题是“我如何在大纲上安装东西”,这根本不是一个编程问题,而且很容易用谷歌搜索。