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



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

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

不起作用的解决方案:之前有人问过类似的问题(使用 shell 脚本自动传输 scp 文件),但是没有一个答案对我有用。群晖 DS 中的 shell 没有必需的命令:expectspawninteractsshpass。它确实有rsync,但路由器没有。

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

问:有没有办法将所需的命令添加到 DS shell?或者也许是一种更简单的方法来完成此操作 - 以便它可以自动发生而无需提示输入密码?

看起来这在 Synology DSM 的有限 Linux bash 中是不可能的。然而,事实证明scp可以使用Python自动化。

我将这个问题中的代码:如何在python中scp?与来自以下线程的脚本相结合: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,"mypasswordn")
elif "100%" in data:  # upload done
os.write(fd,"echo hellon")
os.write(fd,"echo byen")
os.write(fd,"exitn")
os.close(fd)
run()

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

下面的代码适用于python 3:

import os
def run():
print('Start script')
pid, fd = os.forkpty()
if pid==0:
os.system('scp ...')
while True:
data = os.read(fd,1024)
print (data)
if "password:".encode() in data:
os.write(fd,"YOUR-PASSWORDn".encode())
run()

相关内容

  • 没有找到相关文章

最新更新