--- title: "Troubleshooting" html_title: "Enroll Troubleshooting" description: "Common Enroll errors and what they mean: unsafe PATH, sudo, SSH key passphrases, SOPS, validation, and Ansible runs." ---
Troubleshooting

Common messages and fixes

Most Enroll failures are deliberate fail-closed checks. This page explains what to do next.

Re-run the remote harvest with -K or --ask-become-pass. Use --no-sudo only when you accept a limited harvest.

enroll harvest --remote-host app01.example.net --remote-user mig -K --out ./harvest

Use --ask-key-passphrase interactively or --ssh-key-passphrase-env ENV_VAR in CI.

export ENROLL_SSH_KEY_PASSPHRASE='...'
enroll harvest --remote-host app01 --ssh-key-passphrase-env ENROLL_SSH_KEY_PASSPHRASE --out ./harvest

When running as root, Enroll refuses or prompts if PATH could resolve host tools from an attacker-controlled location. Fix the PATH or parent directory permissions before running in automation. Use --assume-safe-path only when you intentionally trust the environment.

Plain manifest mode expects a directory harvest. For an encrypted harvest tarball, pass --sops <fingerprint> to manifest so Enroll decrypts and extracts it safely before rendering.

enroll manifest --harvest ./harvest/harvest.tar.gz.sops --out ./ansible --sops <GPG_FINGERPRINT>

The bundle is internally inconsistent: state.json references an artifact that is absent, or artifacts/ contains files not referenced by state. Re-harvest from a trusted host, or inspect the bundle provenance before using it.

Install the generated requirements before running the playbook. Container, Podman, Flatpak, or Snap roles may add collection requirements.

cd ./ansible
ansible-galaxy collection install -r requirements.yml

Automatic capture of .bashrc, .profile, .bash_logout, and .bash_aliases is disabled unless --dangerous is used. Prefer targeted --include-path first; normal secret checks still apply.