Unattended install
The same installer from cloud-init, a provider startup script, Ansible or Terraform.
How it works
The install command needs no terminal. Anything that can run a shell command as root on a new server can run it: cloud-init user data, a provider's startup script, a configuration tool. The script is the one every customer runs; it verifies the release by SHA-256 and an Ed25519 signature before anything is installed, and it is written to be read first (see Install).
The token
- Create it in the dashboard: Add server. Give the server a name and choose its protection mode (Automatic or Awaiting Approval); the mode travels with the token.
- One token enrols one server and is valid for 72 hours. A token that has enrolled its server is spent; a leaked spent or expired token is worth nothing.
- There is no API that creates tokens: the public API is read-only. For several servers, create several tokens.
- The server needs root, systemd, x86_64, OpenSSL 3 or later and outbound HTTPS to secai.techsteps.ae. Nothing inbound is opened.
cloud-init
User data is kept by the provider and readable by root on the instance, so put a token in it only for a server you are creating now.
#cloud-config
runcmd:
- [ sh, -c, "curl -fsSL 'https://secai.techsteps.ae/agent/install.sh?token=<token>' | bash" ]Provider startup script
Vultr, DigitalOcean, Hetzner and most others run a script once on first boot. Wait for the network before fetching the installer.
#!/bin/bash
for i in $(seq 1 30); do
curl -fsS https://secai.techsteps.ae/health >/dev/null 2>&1 && break
sleep 5
done
curl -fsSL "https://secai.techsteps.ae/agent/install.sh?token=<token>" | bashAnsible
- name: Install the SecAI agent
ansible.builtin.shell: curl -fsSL "https://secai.techsteps.ae/agent/install.sh?token={{ secai_token }}" | bash
args:
creates: /usr/local/bin/security-agent
become: trueTerraform
variable "secai_token" { sensitive = true }
resource "..." "server" {
user_data = <<-EOT
#cloud-config
runcmd:
- [ sh, -c, "curl -fsSL 'https://secai.techsteps.ae/agent/install.sh?token=${var.secai_token}' | bash" ]
EOT
}Checking it worked
- systemctl is-active secai-agent prints active.
- The server appears in the dashboard within about a minute, under the name you gave the token.
- If the script stopped, its last lines say why: an unsupported CPU, OpenSSL older than 3, a download that did not verify, or an expired token. journalctl -u secai-agent has the agent's own log.
Control panels
Plesk has its own extension, SecAI Security, which runs the free assessment and installs the agent from the panel without a terminal.
Reviewed against the implementation on 2026-10-05. Something wrong? Tell us.