Documentation

Run the scanner from your terminal

Install the scanner, run your first check and configure it for regular use. The docs/ guides cover monitoring, CI, deployment and the checks behind each finding.

Quick start

One check, without installing anything

uvx --from check-opencloud-security check-opencloud-security \
  --host opencloud.example.com --check-hardening

Or use the published container. It runs the same plugin and returns the same Nagios/Icinga exit code:

docker run --rm --entrypoint check-opencloud-security \
  okxo/opencloud-scanner:latest --host opencloud.example.com \
  --check-hardening

The plugin talks directly to the instance. It does not send the address to this website or to a remote verdict service.

The one-liner

One command, nothing installed

Run the scanner on your own machine to keep the scan under your control and avoid this service’s rate limits. The commands below use the same scanner as this website.

docker run --rm --entrypoint check-opencloud-security \
  okxo/opencloud-scanner:latest --host opencloud.example.com

The command prints the grade, release support status, matching advisories and failed checks. Its Nagios exit code lets you use it in monitoring, scripts, CI or cron jobs. The scan runs in the container and connects directly to your instance.

As JSON

The whole result document

docker run --rm --entrypoint check-opencloud-scanner \
  okxo/opencloud-scanner:latest scan opencloud.example.com

Every number on a result page comes out of this document, including the addresses block behind the Resolved to line - the IPv4 and IPv6 the name pointed at while the scan ran.

Your own network

The instances this site will not scan

docker run --rm --network host --entrypoint check-opencloud-security \
  okxo/opencloud-scanner:latest --host opencloud.internal.example.com

Run the command-line scanner from a machine that can reach your internal instance. It supports private addresses and internal DNS names. Public scanning services restrict these targets to prevent requests into their own internal networks.

No Docker?

Without a container

uvx --from check-opencloud-security check-opencloud-security \
  --host opencloud.example.com

The scanner is also available from PyPI. Use uv to run it on demand or pipx to install it in an isolated Python environment.

Two entry points

The verdict and the result document

check-opencloud-security

The monitoring plugin: one alert line, performance data and the standard exit codes OK, WARNING, CRITICAL and UNKNOWN.

check-opencloud-security \
  --host opencloud.example.com \
  --release-track production \
  --check-hardening

check-opencloud-scanner

The scanner library as a CLI: the complete JSON result document for a script, a pipeline or an ad-hoc investigation.

check-opencloud-scanner scan \
  opencloud.example.com | jq \
  '.rating, .ratingExplanation'

The everyday flags

Useful options

-H, --host
Hostname, IP or URL; comma-separated for several instances.
--check-hardening
Include missing hardening measures and security headers.
--release-track
rolling, production, lts or auto.
--ignore-hardening
Accept one finding without erasing its evidence; repeatable and wildcard capable.
--debug
Explain where the rating started and what held it down.
--insecure
Skip certificate verification for an instance you control.
--warning / --critical
Choose the rating thresholds that map to monitoring states.
--format
Print Nagios output or Prometheus text.
--baseline / --warn-on-new
Alert only on findings that are new or worse than the last run.
--webhook-url
Notify another system when the configured state is reached.

check-opencloud-security --help is the installed manual. The complete option table includes every default and its COS_ environment variable.

One direction

Configuration and precedence

Settings may come from a YAML or JSON file, the environment or the command line. The order is always:

  1. CLI flagthe explicit answer for this run
  2. EnvironmentCOS_*, useful in containers and services
  3. Configuration filethe durable operator defaults
  4. Built-in defaultthe safe answer when nothing was specified

Let the wizard write the first file:

check-opencloud-security --configure

A file ending in .json is JSON; every other suffix is YAML. Secrets may live in separate files rather than on the command line.

Regular checks

Monitoring, automation and several instances

  • Nagios or Icinga: use the plugin output directly. The most severe status triggered by the configured thresholds determines the exit code.
  • Multiple instances: pass a comma-separated list of hosts. Use a separate configuration file for each instance that needs different settings.
  • Prometheus: run --format=prometheus for a single export, or serve metrics with the built-in exporter using --prometheus-listen-port.
  • CI: run the same command in a pipeline; the status code makes a failed policy fail the job without a wrapper.
  • Scheduled checks: systemd, cron, Kubernetes and the Ansible role all use the same CLI and configuration flow.

From the repository

Full operator guides

Every source document has its own HTML page here, generated from the repository Markdown and checked for drift in CI.