Skip to main content
The connector runs in your network and makes outbound connections only. It keeps the host address, the SSH user, and the SSH private key. Squasher stores only the connector’s public identity and safe target details. You need a connector host and one or more target hosts. Each target stays disabled until two independent checks pass. For how requests run, see Agent remote access.
Remote access is a gated preview. Squasher turns it on for each project. Keep each target disabled until every step on this page passes. Do not install the connector on a developer workstation, and do not reuse a personal SSH key.

Before you start

  • The owner or admin role on the project. Protected steps also need a verified email address.
  • A hardened Linux host for the connector, on amd64 or arm64.
  • Administrative access to the target, and a separate trusted console on it.
  • Cosign v3.1.3 on both hosts, to check the release.
  • The Squasher CLI, for the authority-bundle and verification-bootstrap commands. The CLI has no public install package yet, so you can also call the Remote access API for these two steps.
The examples use /var/lib/squasher-connector for connector state, /var/lib/squasher-target/config.json for the target configuration, and /run/squasher-target/target.sock for the target socket.

Install and enroll the connector

1

Download and check the release

On the connector host, download the archive and check the signing key, the signatures, the checksums, the SBOM, and the build provenance before you extract it. Do not pipe a download into a shell.
2

Install the connector

The installer creates the squasher-connector account and its directories. It does not start a service.
3

Create the connector in Squasher

  1. Select Settings in the sidebar, then the Remote Access tab.
  2. Under 1. Connect your network, enter a Connector label that names the private network, and select Create connector.
  3. Select Copy one-time code. The code is available only in this page view and is hidden by default. To read it, select Reveal one-time code, then Hide one-time code to hide it again.
4

Enroll and start the connector

Enter the code at the hidden prompt, or write it to standard input from a secret manager. Never put it in an argument, an environment variable, a URL, a log, or shell history. The connector keeps its private identity in its state directory. Then select Dismiss and clear.

Create a disabled target

1

Make an auth profile ID

On the connector host, make a random ID for the target’s SSH profile. It is not a secret. Keep it with your target records.
2

Create the target in Squasher

  1. Under 2. Register targets and policy, select Add target.
  2. Enter a Target label that is not a host name, the Environment, the Connector, and the Opaque auth profile ID.
  3. Select Create disabled target, then copy the Target ID from the target card.
The target starts with the default policy: the four host.* operations, 256 KiB of output, and 30 seconds. Do not enter a host, an SSH user, a host key, or a key path in Squasher.
3

Add the target to the connector

From the trusted console on the target, read its Ed25519 host public key:
Send that value to the connector host through your protected setup channel. On the connector host, pin the host key and create the SSH client key for this target:
Squasher never receives the private key, the host, or the SSH user. Keep them out of process arguments.
4

Make the forced authorized_keys entry

Move the file to the target’s trusted console. Do not change its restrict, forwarding, PTY, user-rc, or forced-command options.

Install the target runner

1

Install the target role

On the target, repeat the download and checks from Install and enroll the connector. Then install the target role and the forced key. The installer creates the locked squasher-agent account. It does not start a service.
Keep the whole path and the file owned by root. The squasher-agent account can read the key options but must not change them.
2

Get the verification bootstrap and the fingerprint

These two values travel on separate channels, so that one stolen channel is not enough.
  1. On a protected workstation, write the short-lived signed bootstrap to a new file:
  2. In the dashboard, select Reveal signing-key fingerprint on the target card, and complete email verification. Copy the 64-character fingerprint, then select Dismiss and clear.
3

Bootstrap verification-only trust

Move the bootstrap file and the fingerprint to the target. Then run, as root:
The command fails if the signature or the fingerprint does not match. In this state, the target accepts only the verification check. It rejects all other work.

Verify the target

Squasher enables a target only when two independent checks agree: a signed proof from the connector, and a host key fingerprint that you read on the target yourself.
1

Ask the connector for proof

On the target card, select Ask connector to verify. Then, on the connector host, run:
The connector checks the pinned host key, uses the forced command, and sends only the runner.probe operation. It submits a signed proof.
2

Confirm the fingerprint yourself

From the trusted console on the target, compute the digest of the host public key:
Enter the 64-character digest in Independent host fingerprint digest and select Confirm connector proof and fingerprint. Complete email verification, then select it again. API keys and agents cannot do this step.
3

Activate the target

When both checks match, write the signed authority to a new file, move it to the target through your protected channel, and apply it as root:
The target accepts observe operations only after this command succeeds.

Rotate or revoke access

After a rotation, run squasher-connector rotate-identity on the connector host and enter the new code at the hidden prompt. The code expires after 10 minutes. The connector switches to the new identity only after Squasher accepts it, then deletes the old private key. A revoke stops new work and makes open grants invalid. If a host may be compromised, also stop its local service and remove its authorized_keys entry. You cannot rotate the SSH client key of one target yet. Disable the target before you replace that key.

Next steps

Agent remote access

See the operations, permissions, and audit trail.

Remote access API

Preview, create, and read requests.