Quick Start¶
Prerequisites¶
- A running shed installation with shed-server
- macOS host (Apple Silicon or Intel)
- SSH keys configured on your Mac (via ssh-agent, Secretive, 1Password, etc.)
- For AWS: credentials configured in
~/.aws/credentialsand an IAM role to assume - For Docker: Docker credential helpers configured on your Mac (gcloud, osxkeychain, etc.)
Host Setup¶
-
Download the latest
shed-host-agentfrom Releases: -
Create a config file:
mkdir -p ~/.config/shed cat > ~/.config/shed/extensions.yaml << 'EOF' server: http://localhost:8080 ssh: {} aws: source_profile: default default_role: arn:aws:iam::123456789012:role/your-dev-role docker: registries: - us-docker.pkg.dev - ghcr.io # allow_all: true # or allow all registries logging: enabled: true EOF -
Start the host agent:
Guest Setup¶
Create a shed using the experimental image variant. The guest-side binaries and systemd units are pre-installed — no configuration needed:
See the shed image variants documentation for details on selecting and building variants.
The experimental image includes:
shed-ext-ssh-agent— SSH agent proxy on/run/shed-extensions/ssh-agent.sockshed-ext-aws-credentials— AWS credential endpoint onhttp://127.0.0.1:499docker-credential-shed— Docker credential helper for private registry access- Environment variables
SSH_AUTH_SOCKandAWS_CONTAINER_CREDENTIALS_FULL_URIpre-configured - Docker configured to use
docker-credential-shedas the default credential helper
Verify SSH¶
From inside a shed:
Your private key never enters the VM — the sign request routes through the bus to your Mac.
Verify AWS¶
From inside a shed:
You should see the assumed role identity. No AWS credentials exist in the VM — the SDK fetches temporary credentials through the proxy.
Verify Docker¶
From inside a shed:
Credentials are resolved from your host machine's Docker credential store. No docker login needed inside the VM.
Per-Shed Role Overrides¶
Different sheds can assume different IAM roles:
aws:
source_profile: default
default_role: arn:aws:iam::123456789012:role/dev
sheds:
my-service:
role: arn:aws:iam::123456789012:role/dev
integration-tests:
role: arn:aws:iam::123456789012:role/staging-readonly
What Happens¶
SSH Flow¶
git pushinside the shed triggers an SSH sign requestshed-ext-ssh-agentsends the request through the message busshed-host-agentsigns with your local SSH key- The signature flows back — git push succeeds
AWS Flow¶
- AWS SDK calls
GET http://127.0.0.1:499/credentials shed-ext-aws-credentialssends the request through the message busshed-host-agentcallssts:AssumeRole(or returns cached credentials)- Temporary credentials flow back — SDK call succeeds
- Credentials expire in 1 hour; SDK handles automatic refresh
Docker Flow¶
docker pulltriggers a credential lookup for the registry- Docker execs
docker-credential-shed getwith the registry hostname docker-credential-shedsends the request through the message busshed-host-agentreads the host's Docker config, shells out to the appropriate credential helper (gcloud, osxkeychain, etc.)- Credentials flow back — docker pull succeeds