Bash 自动化scp文件传输-在Synology DS和dd wrt路由器之间
摘要:我想设置一个bash脚本,将单个文件从Synology DS传输到dd wrt路由器(Netgear WNR3500Lv1) 问题:路由器只允许我写入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
/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。复制?或者,真正的问题是“我如何在大纲上安装东西”,这根本不是一个编程问题,而且很容易用谷歌搜索。