14

I need to know how to set up a cron job that automatically connects to a remote server, then changes to a directory and downloads all the files in that directory to local.

I think I have to use SFTP but I saw the following command using "spawn" in a shell script, and I am confused as to how it is used and why:

spawn  sftp user@ipaddress
cd xxx/inbox
mget *

Will this work to download a remote directory?

4
  • 1
    it creates a new process: astro.virginia.edu/class/oconnell/astr511/idl_5.1_html/… I don't even have that command. You should run spawn -v; spawn -V spawn --version; spawn --usage; spawn --help; spawn -h; spawn -help; help spawn; man spawn and see if you can find any information about where that command really comes from. Or at least tell us what OS you are on. It would also be useful to know which ftp clients you have installed (ncftp, lftp, ftp, etc) and if you need to authenticate against the server with a username and password. Commented Oct 17, 2012 at 1:27
  • Which shell is it? Does the first line of the script start with #!? Could you please tell us what is in the first line? Did you find the lines you show here somewhere like this or did you put them together from multiple sources? The spawn command looks like a command of an expect script but the following two commands look like sftp commands (i.e. sftp batch). Commented Jun 25, 2013 at 14:09
  • Did you finally manage to setup the cron job? Commented Oct 15, 2013 at 10:04
  • not really i am doing it on amazon for now, thanks for your answer i will try that and see.. thanksagain.. Commented Oct 16, 2013 at 0:06

1 Answer 1

16

In your case, spawn is most probably a command of expect scripting language which allows automation of interactive program operations. In such a case, spawn runs an external command from the expect script. Your script example is missing a shebang sequence (first line starting with #!), indicating the expect interpreter, and, as such, will not be interpreted by expect when executed directly.

Password authentication with sftp is limited to the interactive mode; To control sftp in interactive mode, you can use the following expect script example:

#!/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

Another possibility is to use public-key authentication, which is more secure (see Setup SFTP to Use Public-Key Authentication). In such a case, you can simply use sftp directly in batch mode:

#!/bin/sh
user=username
host=the-host-address
dir=server-dir

sftp -b - "$user@$host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .