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

问题描述 投票:-1回答:1

简介:我正在设置一个bash脚本,将单个文件从Synology DS传输到dd-wrt路由器(Netgear WNR3500Lv1)。

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

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

使用SSH密钥的解决方案对我来说也不起作用,因为我无法永久地向路由器写入任何东西 - >因此在重新启动后设置就消失了。

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

bash automation scp synology dd-wrt
1个回答
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', '[email protected]', '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一起退出。

© www.soinside.com 2019 - 2024. All rights reserved.