自动化 scp 文件传输 - 在 Synology DS 和 dd-wrt 路由器之间
Automate scp file transfer - between Synology DS and a dd-wrt router
总结: 我正在寻找一个 bash 脚本来将单个文件从 Synology DS 传输到 dd-wrt 路由器 (Netgear WNR3500Lv1 ).
问题:路由器只允许我写入/tmp
文件夹,重启后该文件夹被清除。我不想检查路由器是否重新启动,而是希望每天早上自动将文件 ("hosts") 推送到它。
无效的解决方案: 之前曾问过类似的问题 (Automate scp file transfer using a shell script),但是 none 的答案对我有用。 Synology DS 中的 shell 没有所需的命令:expect
、spawn
、interact
或 sshpass
。它确实有rsync
,但路由器没有。
使用 SSH 密钥的解决方案对我也不起作用,因为我无法向路由器永久写入任何内容 -> 所以在重新启动后设置就消失了。
问题:有没有办法将需要的命令添加到DSshell?或者也许是一种更简单的方法来完成此操作 - 以便它可以自动发生而无需提示输入密码?
似乎这对于 Synology DSM 的有限 linux bash 是不可能的。然而,事实证明 scp
可以使用 Python 实现自动化。
我合并了这个问题的代码:How to scp in python?, with the script from this thread: https://unix.stackexchange.com/questions/276336/automatically-enter-ssh-password-without-using-ssh-key-expect-sshpass-or-p, and then automated it using this guide: 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
退出。
总结: 我正在寻找一个 bash 脚本来将单个文件从 Synology DS 传输到 dd-wrt 路由器 (Netgear WNR3500Lv1 ).
问题:路由器只允许我写入/tmp
文件夹,重启后该文件夹被清除。我不想检查路由器是否重新启动,而是希望每天早上自动将文件 ("hosts") 推送到它。
无效的解决方案: 之前曾问过类似的问题 (Automate scp file transfer using a shell script),但是 none 的答案对我有用。 Synology DS 中的 shell 没有所需的命令:expect
、spawn
、interact
或 sshpass
。它确实有rsync
,但路由器没有。
使用 SSH 密钥的解决方案对我也不起作用,因为我无法向路由器永久写入任何内容 -> 所以在重新启动后设置就消失了。
问题:有没有办法将需要的命令添加到DSshell?或者也许是一种更简单的方法来完成此操作 - 以便它可以自动发生而无需提示输入密码?
似乎这对于 Synology DSM 的有限 linux bash 是不可能的。然而,事实证明 scp
可以使用 Python 实现自动化。
我合并了这个问题的代码:How to scp in python?, with the script from this thread: https://unix.stackexchange.com/questions/276336/automatically-enter-ssh-password-without-using-ssh-key-expect-sshpass-or-p, and then automated it using this guide: 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
退出。