Arshad Mehmood

Search the blog

    Today I Learned

    Using SSH agent to manage keys

    ssh

    SSH agent is a background process that holds your decrypted SSH keys in memory, so you don’t need to enter your passphrase repeatedly.

    How it works

    1. Start the agent (usually automatic in modern shells):
    eval "$(ssh-agent -s)"
    1. Add your key once (prompts for passphrase):
    ssh-add ~/.ssh/id_ed25519
    # Enter passphrase once
    1. Use SSH without entering passphrase:
    ssh user@hostname  # Agent automatically provides the key
    ssh user2@host2    # Still no passphrase needed
    1. Agent forgets the key when you logout → automatic cleanup

    Key commands

    ssh-agent -s           # Start agent and output shell commands
    ssh-add ~/.ssh/id_ed25519  # Add key (prompts for passphrase)
    ssh-add -l             # List all loaded keys
    ssh-add ~/.ssh/id_rsa  # Add another key
    ssh-add -d ~/.ssh/id_ed25519  # Remove specific key
    ssh-add -D             # Remove all keys

    Why use SSH agent?

    MethodPassphrase needed?Visible in history?Security
    Direct SSHEvery connection❌Good
    SSH agentOnce per session❌Excellent (recommended)
    sshpassNo (stored in command)⚠️ YesPoor
    Unencrypted keyNo❌Very poor

    Check if agent is running

    echo $SSH_AUTH_SOCK
    # If output is empty, agent not running

    Automatic setup in ~/.zprofile or ~/.bash_profile

    For convenience, add to your shell profile:

    if [ -z "$SSH_AUTH_SOCK" ]; then
      eval "$(ssh-agent -s)"
    fi
    ssh-add ~/.ssh/id_ed25519 2>/dev/null

    This starts the agent automatically and loads your key on login (you’ll be prompted for the passphrase once).