sftpclone
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_configentries 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 yourssh_configfile. 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_rsaand 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_configfile. If you are using a non-standard path, you can set it here. - k[n]own_hosts path: path to your
known_hostsfile. Default to~/.ssh/known_hosts. - [d]isable-known-hosts: disable remote fingerprint check against local
known_hostfile. - [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:
HostNameUserPortIdentityFileProxyCommand
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
Metadata
Release files for sftpclone 1.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sftpclone-1.2.2.tar.gz | 22.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sftpclone-1.2.2-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 43.0 kB
Release files / sftpclone-1.2.2.tar.gz
| Download URL | sftpclone-1.2.2.tar.gz |
|---|---|
| Size | 22.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aba5847e701f25339fe56ace26a71cc5e95aea31f5711f7a11cd6cebc7800849
|
|
BLAKE2b-256 checksum How to use checksums |
84a21cfce5b83817f035f8f5cc7fb23bf207dda91238eace76af1026c15b0d2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / sftpclone-1.2.2-py2.py3-none-any.whl
| Download URL | sftpclone-1.2.2-py2.py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
5f5c07605b7c1d81751cf8abe773ae7aa26bd9d5b97fb198c5307ef62797017d
|
|
BLAKE2b-256 checksum How to use checksums |
d102a4a8d11dc6d9b089f5ad96cf2a1510e87a16557abbbcff99469caa9d1bd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|