【问题标题】:Automate scp file transfer - between Synology DS and a dd-wrt router自动 scp 文件传输 - 在 Synology DS 和 dd-wrt ​​路由器之间
【发布时间】:2019-09-14 22:43:19
【问题描述】:

总结:我希望设置一个 bash 脚本以将单个文件从 Synology DS 传输到 dd-wrt ​​路由器 (Netgear WNR3500Lv1)。

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

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

使用 SSH 密钥的解决方案对我也不起作用,因为我无法将任何内容永久写入路由器 -> 所以重启后设置就消失了。

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

【问题讨论】:

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

标签: bash automation scp synology dd-wrt


【解决方案1】:

看起来这对于 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 退出。

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 2013-01-19
    • 2014-03-30
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2010-11-23
    • 2015-11-16
    相关资源
    最近更新 更多