SSH AgentΒΆ

DescriptionΒΆ

SSH (Secure Shell) is a cryptographic network protocol for operating network services securely over an unsecured network. The OpenSSH project provides the reference implementation, including ssh-agent for managing authentication keys.

OverviewΒΆ

This role is intended for Manjaro/Arch systems where gnome-keyring no longer reliably manages ssh-agent due to changes in behavior under Wayland. It works by deploying a systemd --user service, making SSH Agent integration predictable and independent of graphical environment quirks.

ArchitectureΒΆ

ARCHITECTURE.md draws SSH Agent from its own metadata: the containers it runs under compose, what changes under swarm, how each volume is backed, and every role it depends on or is depended upon by.

Section

Drawn from

Compose

meta/services.yml

Swarm

meta/services.yml replicas and placement

Volumes

meta/volumes.yml against the NFS decision chain

Dependencies

meta/services.yml and meta/main.yml of every role

PurposeΒΆ

The purpose of this role is to automate the provisioning of SSH agent capabilities and synchronize the .ssh directory from a Git repository. This enables users to access private repositories or authenticate with remote servers immediately after login.

FeaturesΒΆ

  • Clones a remote SSH config repository into ~/.ssh using the dsk-git role.

  • Deploys and enables a systemd user service for ssh-agent.

  • Ensures environment compatibility by injecting the SSH_AUTH_SOCK variable into either .bash_profile or .profile.

  • Fails gracefully with an optional debug message if the Git repository is unreachable.

  • KeePassXC ready: Ensures compatibility with password managers that support SSH agent integration.

Quick SetupΒΆ

DevelopmentΒΆ

Clone, set up the workstation, and deploy SSH Agent onto the local stack:

git clone https://github.com/infinito-nexus/core.git
cd core
make onboard
make compose-deploy mode=reinstall apps=dsk-ssh full_cycle=false

ProductionΒΆ

Install SSH Agent directly onto the target machine: clone the repository, install the OS prerequisites and the repository toolchain, then deploy against localhost over a local connection (no SSH, no container):

git clone https://github.com/infinito-nexus/core.git
cd core
bash scripts/install/package.sh
make install
source scripts/meta/env/load.sh

APP=dsk-ssh
DOMAIN="<your-domain>"
TLS_MODE=self_signed
SSH_PUBLIC_KEY="<your-ssh-public-key>"
INVENTORY=inventories/production
infinito administration inventory provision "$INVENTORY" \
  --inventory-file "$INVENTORY/devices.yml" \
  --host localhost \
  --include "$APP" \
  --vars "{\"TLS_MODE\": \"$TLS_MODE\", \"DOMAIN_PRIMARY\": \"$DOMAIN\", \"users\": {\"administrator\": {\"authorized_keys\": [\"$SSH_PUBLIC_KEY\"]}}}"
infinito administration deploy dedicated "$INVENTORY/devices.yml" \
  --password-file "$INVENTORY/.password" \
  --diff -vv

CreditsΒΆ

Kevin Veen-Birkenbach

Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).

This role deploys no third-party application, so the licence above is the only one that applies.