Skip to main content

shiva

Mass SSH client. Shiva runs one shell command on many hosts at once and tells you which ones worked.

$ shiva -g web 'systemctl is-active httpd'
=== web1 ===
active

=== web2 ===
inactive

Shiva from bastion: completed, 2 host(s)
Start time: 2026-10-22T09:14:02-04:00
End time:   2026-10-22T09:14:03-04:00

=== Successful (1) ===
web1

=== Unsuccessful (1) ===
web2  (exit code 3)

Each host's output goes to stdout and the summary goes to stderr, so shiva -g web uptime > out.txt keeps the report on your terminal.

Install

uv tool install shiva-crunchtools     # or: pipx install shiva-crunchtools
podman run --rm quay.io/crunchtools/shiva --help

Shiva needs ssh on the machine it runs on and sh on every host. Nothing else needs to be installed on the hosts: commands go over the ssh session's stdin, so there is no scp and nothing is left in the hosts' /tmp.

Authentication is your ssh agent (BatchMode=yes, so Shiva never prompts for a password). If SSH_AUTH_SOCK is unset and keychain manages your agent, Shiva reads ~/.keychain/<hostname>-sh.

Picking hosts

Source Example
Group file in group_files shiva -g web uptime
Any file shiva -f hosts.txt uptime
stdin grep db inventory | shiva uptime or shiva -f - uptime
Katello host collection shiva -g "Prod Web" uptime
None of the above the default group

Host lists hold one host per line; # starts a comment and duplicates are dropped. shiva -l lists groups (local files, then Katello host collections) and shiva -L web prints a group.

Options

-g, --group NAME        local group file or Katello host collection
-f, --file FILE         hosts from FILE ('-' = stdin)
-u, --user USER         remote user (default: root)
-j, --jobs N            hosts at once (default: max_slots, 10)
-t, --timeout SECONDS   fail a host whose command runs longer (default: none)
-A, --accept-new-keys   accept host keys not seen before (changed keys are refused)
--fact KEY=VALUE        run only where `facter KEY` prints VALUE; KEY!=VALUE negates
-q, --quiet             no output, exit code only
--json                  one JSON document on stdout
--email ADDRESS         mail the summary through the local MTA
-c, --config FILE       config file
-v, --verbose           report each host on stderr as it finishes

Exit codes: 0 every host succeeded or was skipped, 1 at least one host failed, 2 usage or configuration error.

Facts

shiva --fact os.family=RedHat --fact 'virtual!=physical' 'dnf -y update'

Hosts whose facts do not match are reported as skipped, not failed. A host without facter fails with "facter is not installed".

Timeouts

-t stops waiting and marks the host failed. Shiva kills its local ssh; a remote command that never reads or writes may keep running until it ends on its own. Wrap it in timeout(1) on the host when that matters.

Configuration

Shiva reads the first of -c FILE, ~/.config/shiva/shiva.conf, /usr/local/etc/shiva.conf and /etc/shiva.conf. See examples/shiva.conf. Config files from shiva 0.x load unchanged; the spacecmd keys are ignored.

Katello credentials come from the environment or ~/.config/mcp-env/shiva.env:

KATELLO_URL=https://katello.example.com
KATELLO_USERNAME=admin
KATELLO_PASSWORD_FILE=/home/me/.config/shiva/katello-password   # or KATELLO_PASSWORD
KATELLO_CA_BUNDLE=/etc/pki/tls/certs/katello-ca.pem             # optional

Upgrading from 0.x

Shiva 1.0 is a Python rewrite of the 2012 bash script, which is kept at tag v0.5-bash. Spacewalk (spacecmd) support is gone; Katello host collections take its place. The license changed from GPL-3.0 to AGPL-3.0-or-later.

License

AGPL-3.0-or-later.

Metadata

Release files for shiva-crunchtools 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shiva-crunchtools 1.0.1
File Size Uploaded Provenance
shiva_crunchtools-1.0.1.tar.gz 525.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for shiva-crunchtools 1.0.1
File Interpreter ABI Platform
shiva_crunchtools-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 552.8 kB

Release files / shiva_crunchtools-1.0.1.tar.gz

Download URL shiva_crunchtools-1.0.1.tar.gz
Size 525.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ae7fbde4b289cb42633a9d772f111835b070568f7307d17946804d3384b8fd26
BLAKE2b-256 checksum
How to use checksums
6fec318466eebc096e85676c78512ce1f03324d683d9f6de9209ec1f71bf8dd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Release files / shiva_crunchtools-1.0.1-py3-none-any.whl

Download URL shiva_crunchtools-1.0.1-py3-none-any.whl
Size 27.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e17e742201bff00f7db940309a5e4fde3e6dfa60c4ee08b72382817b79dcd44b
BLAKE2b-256 checksum
How to use checksums
22fd34b68aa6fcc5f540b0d6de4de4b5e95bdde81905a1bedfbbd340f939564e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Security for shiva-crunchtools 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for shiva_crunchtools-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page