Linux(Centos6)中“spawn”命令的含义是什么

Linux(Centos6)中“spawn”命令的含义是什么

我需要知道如何设置一个 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+++

相关内容