07 · SSH provider smoke
Tests the provider abstraction directly: run a script on a remote host through Lakeshore's SSH launcher, without involving a daemon.
Exercises
lakeshore ssh upload(orproviders add --launcher SSH) — provider config write.lakeshore providers test— the provider invocation path, SSH transport, and remote command execution. SSH providers dispatchdirectby default, so the CLI drives the connection from your machine.- Secret resolution at launch time, when the key was uploaded with
--with-key.
Requires
- An SSH-reachable host:
ssh <alias>already works from your laptop, and the alias is aHostentry in~/.ssh/config. - Python 3 on that host — the built-in smoke script is a Python file.
Run
Register the host as a provider. The ergonomic path reads
~/.ssh/config for you:
--with-key uploads the parsed IdentityFile as an ssh_key secret
(named ssh-<alias> unless you pass --key-secret) and references it
from the provider. Without it, the provider records the local pem path
instead and only works from this machine.
By hand, if the host isn't in ~/.ssh/config:
Confirm it landed, then smoke-test it:
Expected output
providers test with no --script runs the bundled stdlib-only
hello.py, so the remote stdout looks like:
The command exits non-zero on failure. Swap in your own script with
--script, and raise --timeout (default 600 seconds) for anything
slow.
If it fails
| Symptom | Likely cause |
|---|---|
ssh: connect to host … port 22: Connection refused | Wrong host or port. Run ssh -v <alias> first to verify. |
Permission denied (publickey) | Wrong key secret, or the key isn't authorized on the host. |
no host '<alias>' in ~/.ssh/config | ssh upload / ssh probe only know aliases from that file — use providers add by hand instead. |
python3: command not found | The smoke payload is Python. Install Python 3 on the host or pass a --script that isn't Python-dependent. |
| Hangs with no output | The host accepted the SSH but the command stalled — often a prompt (sudo, host-key confirmation). lakeshore ssh probe <alias> isolates the connection step. |
Status
Manual.