Understanding ssh-agent and ssh-add: Stop Typing Your Passphrase All Day

If you regularly use GitHub, GitLab, remote Linux servers, cloud platforms, or automation tools, you’ve probably reached the point where typing your SSH key passphrase over and over becomes frustrating.

This is exactly the problem that ssh-agent and ssh-add were designed to solve.

The Problem

A well-managed SSH private key should normally be protected by a passphrase. If somebody gains access to the key file, the passphrase provides another layer of protection.

The downside is obvious:

git push
Enter passphrase...

git pull
Enter passphrase...

ssh server1
Enter passphrase...

ssh server2
Enter passphrase...

After a while, this becomes tedious.

Enter ssh-agent

ssh-agent is a background process that securely stores unlocked SSH keys in memory.

Instead of repeatedly decrypting your private key, you unlock it once and the agent handles authentication requests on your behalf.

Think of it as a temporary keyring:

+----------------+
| Private Key    |
+----------------+
        |
        v
+----------------+
| ssh-agent      |
| (memory only)  |
+----------------+
        |
        v
SSH, Git, SCP, Rsync

The passphrase is entered once, and the agent remembers the key until it expires or is removed.

Loading Keys with ssh-add

Once ssh-agent is running, keys can be loaded with:

ssh-add

You’ll be prompted for the passphrase once.

After that, commands such as:

git pull
git push
ssh server.example.com

can use the cached key without repeatedly prompting for a passphrase.

To see what keys are loaded:

ssh-add -l

Example output:

4096 SHA256:abcd1234... /home/user/.ssh/id_ed25519

If no keys are loaded:

The agent has no identities.

Limiting How Long Keys Stay Loaded

One feature many users overlook is automatic expiry.

Instead of keeping a key loaded forever, you can specify a lifetime:

ssh-add -t 1d

This loads the key for 24 hours.

After that period expires, the key is automatically removed from the agent and must be re-added.

This provides a good balance between security and convenience.

Automating the Process

For many Linux users, the workflow becomes:

eval $(ssh-agent -s)
ssh-add -t 1d

every time a shell session starts.

That works, but eventually it becomes repetitive.

To eliminate the manual steps, I use a small shell script that lives in:

~/.bashrc.d/ssh-agent
# ssh-agent configuration

if [ -z "$( pgrep ssh-agent )" ]; then
   rm -rf /tmp/ssh-*
   eval $( ssh-agent -s )
else
   export SSH_AGENT_PID=$(pgrep ssh-agent)
   export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi

if [ "$(ssh-add -l)" == "The agent has no identities." ]; then
    ssh-add -t 1d
fi

What This Script Does

Starts an Agent Automatically

If no agent is currently running:

eval $(ssh-agent -s)

starts one automatically.

No need to remember the command yourself.

Reconnects to an Existing Agent

If an agent already exists:

export SSH_AGENT_PID=$(pgrep ssh-agent)
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)

the shell reconnects to the running agent rather than creating another one.

This avoids accumulating multiple ssh-agent instances.

Automatically Loads Keys

The script checks the current status:

ssh-add -l

If the agent contains no identities:

ssh-add -t 1d

loads the SSH key with a 24-hour lifetime.

In practice, this means you log in, enter your passphrase once, and then get on with your day.

Why This Is Useful

With a setup like this, the workflow becomes:

Login
Agent detected or started
Keys verified
Enter passphrase once
Work normally all day

Rather than:

Login
Remember to start ssh-agent
Remember to run ssh-add
Repeat tomorrow

The difference sounds small, but if you spend your days jumping between Git repositories, remote hosts, automation systems, and cloud platforms, removing those little bits of friction adds up surprisingly quickly.

A Few Caveats

This approach works well on a personal Linux workstation, but there are a few things worth noting:

For a personal workstation, however, a simple script like this is often perfectly adequate and easy to understand.

Final Thoughts

ssh-agent and ssh-add are among the most useful productivity tools available to Linux users.

They allow you to:

More importantly, a small amount of automation can make the process almost invisible.

Sometimes the best automation isn’t complicated.

Sometimes it’s simply removing one small annoyance that you encounter every day.