我需要知道如何设置一个 cron 作业,自动连接到远程服务器,然后更改到目录并将该目录中的所有文件下载到本地。
我想我必须使用 SFTP,但是我在 shell 脚本中看到以下命令使用了“spawn”,但我不明白它是如何使用的以及为什么使用:
spawn sftp user@ipaddress
cd xxx/inbox
mget *
这可以下载远程目录吗?
答案1
就你的情况而言,spawn
很可能是命令预计脚本语言,允许自动化交互式程序操作。在这种情况下,spawn
从 expect 脚本运行外部命令。您的脚本示例缺少舍邦序列(第一行以 开头#!
),表示expect
解释器,因此,expect
直接执行时将不会被解释。
密码验证sftp
仅限于交互模式;若要sftp
在交互模式下进行控制,可以使用以下 expect 脚本示例:
#!/usr/bin/env expect
set timeout 20 # max. 20 seconds waiting for the server response
set user username
set pass your-pass
set host the-host-address
set dir server-dir
spawn sftp $user@$host
expect assword:
send "$pass\r"
expect sftp>
send "cd $dir\r"
expect sftp>
send "mget *\r"
expect sftp>
send "exit\r"
expect eof
另一种可能性是使用公钥认证,它更安全(参见设置 SFTP 以使用公钥认证)。在这种情况下,您可以直接sftp
在批处理模式下使用:
#!/bin/sh
user=username
host=the-host-address
dir=server-dir
sftp -b - "$user@$host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++