Requirements
Prerequisites for Introduction and Prepare. You can start local-only; add the remote pieces when you SSH to other hosts. pkg> add DistSSHKit does not install ssh, rsync, or git.
All machines
Applies to the machine where you run the kit and each SSH host that runs jobs.
- macOS, Linux, and WSL2 Ubuntu (not native Windows)
- Julia 1.12+
- Library (
Pkg.add/using/go!/drive!), CLI (julia -m DistSSHKit), and optionaldistsshkit(User Guide) - Same major.minor on the controller and SSH hosts (
setup --checkfails on a mismatch unless--ignore-julia-version; patch-only differences warn) - Prefer juliaup (
$HOME/.juliaup/bin/julia): E2E workers and remote auto-detect start there.--julia/JULIA_DISTRIBUTED_EXEoverride. Missing path or a related bug: open an Issue.
- Library (
WSL2 is Linux, with a few extra rules:
- Run the kit inside the distro, not PowerShell
- Keep the project on the Linux filesystem (
~/…), not/mnt/c/… - Install
ssh/rsync/ Julia inside WSL - SSH E2E uses the same
./testenv/docker-ssh/scripts/up.sh --e2eas Linux (Docker Compose must be visible from WSL)
Remotes
No hard limit on the number of remote hosts. More hosts just means more time spent on SSH connections and deployment, so start with a few and scale up. If SSH disconnects are a risk, use machines that stay up, and keep the master's run alive with something like tmux.
When you use SSH hosts (not just local:N):
Where you run the kit — also install:
ssh— passwordless login to each hostrsync— collect results (go/drive); push the project tree only without git (setup --rsync)git— git deploy path only (clone / push / pull); skip for rsync-only
Each SSH host:
- Passwordless SSH from the machine where you run the kit (repeat per host; use a connect timeout — bare
sshcan hang on a bad IP). See Checks below. git— git deploy path only (clone / pull on the host); skip for rsync-only. Git vs rsync: First Steps · Prepare, User Guide · setup.
Project
DistSSHKit assumes a Julia project — Project.toml at the project root (not a subfolder like demos/):
- Run with
julia --project=.from that directory (the kit activates the nearestProject.tomlabove each script).julia -m DistSSHKitfrom a project that only depends on DistSSHKit uses that job'sProject.toml, not the kit's (DISTRIBUTED_PROJECT_ROOToverrides). - Declare dependencies in that
Project.toml/Manifest.toml. Install them on every machine that runs jobs: localPkg.instantiate(), andsetup --instantiateon remotes (after--cloneor--rsync).
Demo scripts live under ./demos/ after demo install with_kit (or without_kit); see Introduction.
Checks
The ssh … snippets below are examples you can type yourself — DistSSHKit does not run them. USER@HOST is a placeholder (user@hostname, an IP, or an SSH config Host alias). Timeouts and extra -o flags need not match the kit (ConnectTimeout here is 5; the kit uses 10 plus keepalives).
- Local-only first run: the Where you run the kit list is enough.
- Using remotes: add Each SSH host too. For the kit's own probe, use
setup --checkat the end of that subsection.
Where you run the kit
julia --versionuname -s— Darwin or Linuxwhich rsync— remotes / collectwhich git— git deploy path only
Each SSH host
Example — passwordless login (once per host):
ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=accept-new USER@HOST echo okExample — Julia 1.12+ (same major.minor as the kit machine, via juliaup). Log in, find the binary, then check with that full path (non-interactive ssh often has no login PATH, so bare julia fails):
ssh USER@HOSTwhich julia(often$HOME/.juliaup/bin/julia)exit
Replace /path/from/which/julia with that path:
ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=accept-new USER@HOST '/path/from/which/julia --version'The kit covers the same ground (ssh, Julia path / version, remote project) with setup --check (probes common Julia locations; this is a DistSSHKit command):
julia --project=. -m DistSSHKit setup --check USER@HOSTExample — git only if that host will clone / pull:
ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=accept-new USER@HOST 'which git'Next: Introduction · Prepare.