Skip to main content

A tool for cloning/syncing a local directory tree with an SFTP server.

Project description

sftpclone

PyPI version PyPI python version PyPI license

A tool for cloning/syncing a local directory tree with an SFTP server.

Features

  • Keep in sync a local directory tree with a specified folder of an SFTP server.
  • Update symbolic links as needed and keep files consistent.
  • Automatic tilde expansion/handling on the SFTP server.
  • Public key authentication.
  • ssh_config entries compatibility.
  • Syncing exclusion patterns.
  • Compatible with both Python 2 and Python 3.

Install

You can install sftpclone by using pip:

$ pip install sftpclone --user

Note: Sometimes building required dependencies in user mode doesn't work. In that case, you'd need to use sudo and to remove the --user flag. Alternatively, you could make use of a virtualenv.

Alternatively, you can clone this repository and then launch:

$ git clone https://github.com/unbit/sftpclone
$ cd sftpclone
$ python setup.py install

In both cases, you'll find the sftpclone script in your path.

Usage

usage: sftpclone [-h] [-k private-key-path]
                 [-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}] [-p PORT]
                 [-f] [-a] [-c ssh config path] [-n known_hosts path] [-d]
                 [-e exclude-from-file-path] [-t] [-o]
                 local-path user[:password]@hostname:remote-path

Where, for each command line argument:

  • local-path: The path of the local folder. This path must exists and can contain ~ (we use tilde expansion).
  • sftp-url: It specifies the remote SFTP url having the form: [user[:password]@]hostname:remote-path. Both the password and the user field can be omitted. If you omit the former then you should specify a private key identity file. If you omit the latter then the current user is automatically used. The hostname can refer to a element of your ssh_config file. If the remote path contains ~, then it will be expanded to the default folder in which the user begins her SFTP session.
  • [h]elp: show the help message and exit.
  • private-[k]ey-path: the path to your private identity file. Set it if you are not using password authentication. It automatically defaults to ~/.ssh/id_rsa and can be used more than once.
  • [l]ogging: set the log level (ERROR by default).
  • [p]ort: SSH remote port (defaults to 22).
  • [f]ix-symlinks: if you have absolute symlinks pointing to your synced directory, they will remain consistent on the remote server: i.e., they will have an absolute path that reflect the path of the cloned directory on the server. Useful for cluster configurations.
  • ssh-[a]gent: enable ssh-agent support. Any private-[k]ey-path argument will be ignored.
  • ssh-[c]onfig-path: in the sftp-url's hostname you can specify an entry of your ssh_config file. If you are using a non-standard path, you can set it here.
  • k[n]own_hosts path: path to your known_hosts file. Default to ~/.ssh/known_hosts.
  • [d]isable-known-hosts: disable remote fingerprint check against local known_host file.
  • [e]xclude-from-file-path: the path to a file containing a list of patterns. Each file matched by these pattern will be ignored (not synced).
  • do-not-dele[t]e: do not delete remote files that are missing from the local directory.
  • all[o]w-unknown: do not ask for confirmation before connecting to unknown hosts.

Warning: be sure to select a proper remote folder. The synchronization process will indeed delete any file that doesn't exist in the local folder (unless you turn the -t option on).

ssh_config compatibility

The hostname in the sftp-url parameter can be a valid entry in a ssh_config file. Specifically, your entry should have relevant parameters such as:

  • HostName
  • User
  • Port
  • IdentityFile
  • ProxyCommand

Any value not found will fallback to the CLI arguments. Anyway, you have to set the IdentityFile field, otherwise authentication will try to fallback to ~/.ssh/id_rsa and could not work. The first hostname matching the pattern is chosen (in the ssh_config way).

known_hosts checking

By default sftpclone will match the remote host fingerprint against the one contained in your ~/.ssh/known_hosts file. If this file doesn't exists on your machine, you can specify a different path by using the -n option. Furthermore, you can disable the check with the -d flag. Unknown hosts will require the user to authorize the connection. Please note that, even after authorization, the known_host file won't be modified.

Exclude list

It takes inspiration from the rsync/tar --exclude-from flag.

You can specify among your command line arguments a file containing a list of patterns, one per each line. All those files that match any pattern will not be synced with the SFTP server.

Lines beginning with ; or # are ignored.

Each pattern is considered relative to the syncing directory. As a consequence, leading / are ignored.

Example

; This will exclude any file or directory beginning with foo
foo*
; This will exclude any file foo in a subdir of the directory bar.
bar/*/foo

Programmatic usage

You can find some examples of programmatic usage inside the examples directory.

Testing

This project uses nose for testing. In addition, on Python 2 you'll need the mock module (part of Python standard lib from 3.3). In both cases, you can install test requirements with:

$ pip install -r test_requirements.txt

Then, You can launch the test suite by using, from the project root directory:

$ nosetests
$ python setup.py test # alternatively

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sftpclone-1.2.2.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

sftpclone-1.2.2-py2.py3-none-any.whl (20.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sftpclone-1.2.2.tar.gz.

File metadata

  • Download URL: sftpclone-1.2.2.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0

File hashes

Hashes for sftpclone-1.2.2.tar.gz
Algorithm Hash digest
SHA256 aba5847e701f25339fe56ace26a71cc5e95aea31f5711f7a11cd6cebc7800849
MD5 4a23671f12c2ad4b14f26b43c3ef16ac
BLAKE2b-256 84a21cfce5b83817f035f8f5cc7fb23bf207dda91238eace76af1026c15b0d2b

See more details on using hashes here.

File details

Details for the file sftpclone-1.2.2-py2.py3-none-any.whl.

File metadata

  • Download URL: sftpclone-1.2.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 20.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.7.0

File hashes

Hashes for sftpclone-1.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5f5c07605b7c1d81751cf8abe773ae7aa26bd9d5b97fb198c5307ef62797017d
MD5 3fbacda64da5340691df9ca1ca71af41
BLAKE2b-256 d102a4a8d11dc6d9b089f5ad96cf2a1510e87a16557abbbcff99469caa9d1bd7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page