A friendly CLI for HashiCorp Boundary that makes SSH access simple. Connect to targets using friendly names instead of IDs, with Teleport-style user@target syntax.
bndry ssh kmendell@webserver-01- Teleport-style SSH —
user@targetsyntax for easy connections - Name-based access — no more hunting for
ttcp_...IDs - One-command setup —
bndry add 10.0.0.5creates everything automatically - Interactive workflows — smart prompts when you need them
- Zero dependencies — uses the official Boundary Go SDK (no
boundaryCLI orjqrequired)
brew install ofkm/tap/bndrygo install github.com/ofkm/bndry/cmd/bndry@latestgit clone https://github.com/ofkm/bndry.git
cd bndry
go build -o bndry ./cmd/bndryDownload from GitHub Releases
# 1. Login
bndry login
# 2. Add a target
bndry add 192.168.1.100 -n my-server
# 3. Connect
bndry ssh kmendell@my-serverAuthenticate with Boundary via OIDC.
Quickly create an SSH target.
Flags:
-n, --name— Target name (auto-generated if omitted)-p, --port— SSH port (default: 22)-g, --group— Host set name--no-connect— Don't auto-connect after creation
Example:
bndry add 10.0.0.5 -n webserver -p 22Interactive guided setup for creating targets.
bndry setupConnect to a target via SSH.
# Teleport-style with username
bndry ssh kmendell@webserver-01
# Use Boundary credentials
bndry ssh webserver-01
# Interactive selection
bndry ssh
# List all targets
bndry ssh list
# Inspect target
bndry ssh inspect webserver-01Manage configuration.
bndry config show # Show config
bndry config path # Show config file location
bndry config init # Create new configConfig file: ~/.config/bndry/config.yaml (or set BNDRY_CONFIG)
Create config:
bndry config initExample config:
boundary_addr: https://boundary.example.com
oidc_auth_method_id: amoidc_1234567890
auth_token: at_token_here
default_project_scope_id: p_prod01
default_catalog_name: Homelab Static Hosts
default_host_set_name: linux-servers
default_role_name: linux-ssh-users
default_target_port: 22
default_create_role: true
default_connect_after_create: trueEnvironment variables (override config with BNDRY_ prefix):
export BNDRY_BOUNDARY_ADDR=https://boundary.example.com
export BNDRY_DEFAULT_TARGET_PORT=2222- "No host sources found" →
bndry ssh inspect <target>to check target configuration - "Authentication failed" →
bndry loginto refresh token - "Permission denied" → Check Boundary role grants for authorize-session permission
- Can't find config →
bndry config pathto verify location, orbndry config initto create
# Build
go build -o bndry ./cmd/bndry
# Test
go test ./...
# Or use just
just build
just testRelease: Tag with git tag v1.0.0 && git push origin v1.0.0. GoReleaser builds binaries and updates Homebrew tap.
Apache 2.0