Interactive directory/file transfer with SHA-256 checksum verification over SSH
Project description
verisync — Interactive Directory Transfer with Checksum Verification
A general-purpose interactive file/directory transfer utility with end-to-end SHA-256 checksum verification over SSH.
Transfer files or directories to a remote server via rsync or tar.gz, then automatically verify every file's integrity — all from a single command.
Table of Contents
Features
- 📁 File and directory — transfer a single file or an entire directory tree
- ✅ End-to-end SHA-256 verification — a checksum manifest is generated locally and re-verified remotely after transfer
- ♻️ rsync mode (default) — incremental, resumable, and bandwidth-efficient
- 🗜️ Zip mode (
--zip) — packs source into a.tar.gz, uploads, and auto-extracts on the remote - 🔌 SSH multiplexing — a single SSH control socket is reused across all remote operations, including 2FA/password auth flows
- 📏 Space checks — remote free disk space is measured before transfer; warns if source exceeds 100 GiB
- 🖥️ Interactive + CLI — all parameters can be supplied as CLI flags or entered interactively at runtime
- 🕒 Elapsed time — reports total transfer and verification duration
Requirements
| Requirement | Notes |
|---|---|
| Bash >= 4.0 | Required for string manipulations and set -euo pipefail |
| rsync | Used for incremental file transfer in default mode |
| ssh | SSH client with multiplexing (ControlMaster) support |
| sha256sum | Standard coreutils tool, available on all Linux/macOS systems |
| bc | Used for human-readable size arithmetic |
| tar | Only required when using --zip mode |
Note:
verisynconly needs to be installed on the source machine. The remote side requires onlysha256sumand standard POSIX shell tools — no remote installation needed.
Installation
Via pip (recommended)
pip install verisync
This places the verisync command on your PATH.
Via pipx (isolated)
pipx install verisync
Manual install
git clone https://github.com/whats2000/verisync.git
cd verisync
bash verisync.sh --help
Usage
verisync [OPTIONS]
Arguments
| Flag | Description |
|---|---|
-s, --src <path> |
Local source file or directory to transfer |
-u, --user <user> |
Remote SSH username |
-H, --host <host> |
Remote SSH hostname or IP address |
-d, --dest <path> |
Remote destination directory |
--zip |
Pack source into tar.gz before transferring |
-h, --help |
Show usage and exit |
Any flag not supplied on the command line will be prompted interactively.
Examples
Interactive mode (prompts for all parameters):
verisync
Fully specified via CLI:
verisync --src /data/project --user alice --host hpc.example.com --dest /scratch/alice/
Use zip mode for a single compressed upload:
verisync -s /data/project -u alice -H hpc.example.com -d /scratch/alice/ --zip
Transfer Steps
| Step | Description |
|---|---|
| 1 | Collect source path, remote user, host, and destination |
| 2 | Measure local size; warn if > 100 GiB |
| 3 | Test SSH connectivity; check remote free disk space |
| 4 | Generate SHA-256 checksum manifest for every file in the source |
| 5 | Transfer files + manifest via rsync (or tar.gz); verify checksums remotely |
Modes: rsync vs zip
| Feature | rsync (default) | --zip mode |
|---|---|---|
| Resumable? | Yes | No |
| Incremental? | Yes | No |
| Single archive? | No | Yes |
| Compression | -z (inline) |
gzip (pre-compressed) |
| Remote extraction | Not needed | Auto-extracted via tar |
Contributing
Bug reports and pull requests are welcome at github.com/whats2000/verisync.
License
MIT — see LICENSE for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file verisync-1.2.0.tar.gz.
File metadata
- Download URL: verisync-1.2.0.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cc49ee91d596cbf01a7e0768757b20d651a666db3570387cee3c5e4365a4e85
|
|
| MD5 |
8845cc8f7a982aee2d0d5006664955ae
|
|
| BLAKE2b-256 |
5baedddaeb814cdfee11270444b922818f8b800c7658ec1e4a47d53b05b21e78
|
Provenance
The following attestation bundles were made for verisync-1.2.0.tar.gz:
Publisher:
publish.yml on whats2000/verisync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verisync-1.2.0.tar.gz -
Subject digest:
8cc49ee91d596cbf01a7e0768757b20d651a666db3570387cee3c5e4365a4e85 - Sigstore transparency entry: 1063352613
- Sigstore integration time:
-
Permalink:
whats2000/verisync@9ae5d8c6b584a874e39c3a99cc07a5350bc60e03 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/whats2000
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ae5d8c6b584a874e39c3a99cc07a5350bc60e03 -
Trigger Event:
push
-
Statement type:
File details
Details for the file verisync-1.2.0-py3-none-any.whl.
File metadata
- Download URL: verisync-1.2.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c76d4138372996cb5bc737ac2cfaea66f0cf5fe850a1b8a756f63b1d87da1c1b
|
|
| MD5 |
95128ca694100afae04ee3378d49c342
|
|
| BLAKE2b-256 |
0237a4ed03d30384ddf35a07fd6d7044e8577c18b19e530a11406bdce62f46ae
|
Provenance
The following attestation bundles were made for verisync-1.2.0-py3-none-any.whl:
Publisher:
publish.yml on whats2000/verisync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verisync-1.2.0-py3-none-any.whl -
Subject digest:
c76d4138372996cb5bc737ac2cfaea66f0cf5fe850a1b8a756f63b1d87da1c1b - Sigstore transparency entry: 1063352659
- Sigstore integration time:
-
Permalink:
whats2000/verisync@9ae5d8c6b584a874e39c3a99cc07a5350bc60e03 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/whats2000
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ae5d8c6b584a874e39c3a99cc07a5350bc60e03 -
Trigger Event:
push
-
Statement type: