One-way Synchronization with sFTP

Here is a solution that allows synchronization (mirroring) of a sFTP folder with a local folder. The solution provided here uses the free WinSCP program. An alternative to this approach could be the paid software GoodSync which is fairly easy to use.

Tasks

  1. Download and install WinScp and add it to the PATH variable through the custom install.
  2. Configure a session in WinScp
  3. Write the sync script used by WinScp
  4. Write a batch file to call WinScp
  5. (Optionally) add a scheduled task to run the sync script.

Installing WinScp

Just use the installer for Windows and select custom install and check the add to PATH variable in the installer when the tab shown below appears.

WinScp custom install

WinScp add to PATH

Configure a Session in WinScp

Start WinScp after the installation completes and create a new session. This session must be stored with all transfer settings and password.

First enter host name, user name and password. Then click the advanced button:

winscp-create-login

In the advanced dialog change the drop-down for UTF-8 encoding filenames to “On”. This is needed to make Danish characters “ÆØÅæøå” show correctly on the computer that fetched the files.

winscp-create-login-encoding

Finally, save the session by clicking Save As…”. The name entered here “myuser@my.server.com” is the name that will be used later in the sync script.

winscp-create-login-save

Sync Script

WinScp needs a sync script that lists the commands and settings it must use to sync the remote sFTP path to the local directory. Below is shown a script “script.bat”:

# Automatically abort script on errors
option batch abort
# Disable overwrite confirmations that conflict with the previous
option confirm off
# Connect using a password
# open sftp://user:password@example.com -hostkey="ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
# Connect using stored connection
open "myuser@my.server.com"
# Force binary mode transfer
option transfer binary

synchronize local -delete -mirror C:\sync-tmp /

# Disconnect
close
exit

Note that the script references two settings that must be customised upon re-use.

  1. The stored session name. (“myuser@my.server.com”)
  2. The path to which the files will be synced. (“c:\sync-tmp”)

Note that the script contains a comment which lists the case where a session is opened using a hostkey instead of a stored password.

Batch script to invoke sync

To make it easiere to run the sync script a wrapper batch file can be created “do-sync.bat” that can look like this:

"c:\Program Files (x86)\WinSCP\WinSCP.com" /console /script=sync.bat /log=sync.log

The batch script just calls WinScp (without starting a new application, change .com to exe to do so) with the sync script and also sets a bath to a log file that it uses.

Configure scheduled task

The do-sync.bat file created in the previous step can now be used in a standard Scheduled Task in Windows to setup a recurring task for fetching an update daily/weekly or …

For instructions see the guide from Microsoft.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.