rename: IAMROOT → SKELETONKEY across the entire project
release / build (arm64) (push) Waiting to run
release / build (x86_64) (push) Waiting to run
release / release (push) Blocked by required conditions

Breaking change. Tool name, binary name, function/type names,
constant names, env vars, header guards, file paths, and GitHub
repo URL all rebrand IAMROOT → SKELETONKEY.

Changes:
  - All "IAMROOT" → "SKELETONKEY" (constants, env vars, enum
    values, docs, comments)
  - All "iamroot" → "skeletonkey" (functions, types, paths, CLI)
  - iamroot.c → skeletonkey.c
  - modules/*/iamroot_modules.{c,h} → modules/*/skeletonkey_modules.{c,h}
  - tools/iamroot-fleet-scan.sh → tools/skeletonkey-fleet-scan.sh
  - Binary "iamroot" → "skeletonkey"
  - GitHub URL KaraZajac/IAMROOT → KaraZajac/SKELETONKEY
  - .gitignore now expects build output named "skeletonkey"
  - /tmp/iamroot-* tmpfiles → /tmp/skeletonkey-*
  - Env vars IAMROOT_MODPROBE_PATH etc. → SKELETONKEY_*

New ASCII skeleton-key banner (horizontal key icon + ANSI Shadow
SKELETONKEY block letters) replaces the IAMROOT banner in
skeletonkey.c and README.md.

VERSION: 0.3.1 → 0.4.0 (breaking).

Build clean on Debian 6.12.86. `skeletonkey --version` → 0.4.0.
All 24 modules still register; no functional code changes — pure
rename + banner refresh.
This commit is contained in:
2026-05-16 22:43:49 -04:00
parent 9d88b475c1
commit 9593d90385
109 changed files with 1711 additions and 1701 deletions
@@ -1,10 +1,10 @@
#!/usr/bin/env bash
# iamroot-fleet-scan — scan a host list with iamroot, aggregate results
# skeletonkey-fleet-scan — scan a host list with skeletonkey, aggregate results
#
# Usage:
# iamroot-fleet-scan.sh [OPTIONS] hosts.txt
# iamroot-fleet-scan.sh [OPTIONS] - # hosts on stdin
# iamroot-fleet-scan.sh [OPTIONS] - # one host per line
# skeletonkey-fleet-scan.sh [OPTIONS] hosts.txt
# skeletonkey-fleet-scan.sh [OPTIONS] - # hosts on stdin
# skeletonkey-fleet-scan.sh [OPTIONS] - # one host per line
#
# Each line in the host list is either:
# - a hostname/IP (uses default ssh user from your config)
@@ -14,13 +14,13 @@
# Output: combined JSON to stdout, one object per host:
# { "generated_at": "...", "summary": {...},
# "hosts": [ { "host": "...", "ok": true,
# "scan": { /* iamroot --scan --json */ } }, ... ] }
# "scan": { /* skeletonkey --scan --json */ } }, ... ] }
#
# Options:
# --binary <path> path to iamroot binary (default: ./iamroot)
# --binary <path> path to skeletonkey binary (default: ./skeletonkey)
# --ssh-key <path> ssh key file (passed to scp and ssh)
# --ssh-opts "..." extra ssh options (e.g. "-o ConnectTimeout=5")
# --remote-path <p> where to scp the binary (default: /tmp/iamroot)
# --remote-path <p> where to scp the binary (default: /tmp/skeletonkey)
# --no-sudo don't prefix the remote command with sudo
# --parallel <N> run N hosts concurrently (default: 4)
# --summary-only skip per-host detail in stdout; print summary only
@@ -32,10 +32,10 @@
set -euo pipefail
BINARY="./iamroot"
BINARY="./skeletonkey"
SSH_KEY=""
SSH_OPTS=""
REMOTE_PATH="/tmp/iamroot"
REMOTE_PATH="/tmp/skeletonkey"
USE_SUDO=1
PARALLEL=4
SUMMARY_ONLY=0
@@ -66,7 +66,7 @@ if [[ -z "$HOSTFILE" ]]; then
fi
if [[ ! -x "$BINARY" ]]; then
echo "error: iamroot binary not found / not executable: $BINARY" >&2
echo "error: skeletonkey binary not found / not executable: $BINARY" >&2
exit 2
fi
@@ -109,7 +109,7 @@ scan_one_host() {
fi
# 2. run --scan --json
# iamroot's exit codes are SEMANTIC (0=OK, 2=VULNERABLE, 4=PRECOND_FAIL, etc.)
# skeletonkey's exit codes are SEMANTIC (0=OK, 2=VULNERABLE, 4=PRECOND_FAIL, etc.)
# — nonzero is NOT a failure here. Treat ANY stdout JSON as success;
# only ssh-transport-level failures (key denied, network) are real
# failures, and those manifest as empty stdout + nonzero exit.
@@ -133,7 +133,7 @@ scan_one_host() {
# 4. emit one combined JSON object
if ! echo "$scan_out" | jq --arg h "$hostspec" \
'{host: $h, ok: true, scan: .}' 2>/dev/null; then
echo "{\"host\":\"${hostspec}\",\"ok\":false,\"error\":\"invalid JSON from iamroot\"}"
echo "{\"host\":\"${hostspec}\",\"ok\":false,\"error\":\"invalid JSON from skeletonkey\"}"
return 1
fi
}