36

I recently setup openssh so I could use it with git.

In the process of setting it up (as per this article) I ran the commands:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>

Some time later, after I logged out and back in I tried to use git push I got an error. The solution to this error was running those same commands again.

Please tell me how I can

  • Keep the ssh-agent running so I don't have to start a new one
  • Remember the keys I've added so I don't have to add them everytime

Just to clarify, I use zsh so certain bash features won't work in my .zshrc.

3
  • You should start with understanding what is ssh-agent for and how does it work before trying to suit it your twisted use case.
    – Jakuje
    Dec 4, 2016 at 18:55
  • What error you got?
    – Jakuje
    Dec 4, 2016 at 19:05
  • @Jakuje The error was about a missing pubkey and asked "Have you started ssh-agent?".
    – timotree
    Dec 4, 2016 at 19:28

2 Answers 2

40

What is ssh-agent for and how does it work?

The ssh-agent keeps your decrypted keys securely in memory and in your session. There is no reasonable and safe way to preserve the decrypted keys among reboots/re-logins.

OK, how can I automate it?

Automate ssh-agent startup

Add

[ -z "$SSH_AUTH_SOCK" ] && eval "$(ssh-agent -s)"

to your ~/.bashrc or other startup script (~/.zshrc).

Automate adding the keys

The keys can be automatically added upon the first usage, when you add

AddKeysToAgent yes

to your ~/.ssh/config.

For more information on ~/.ssh/config see man ssh_config.

9
  • So you're saying if I enable AddKeysToAgent, then whenever I type eval "$(ssh-agent -s)" it will add my key?
    – timotree
    Dec 4, 2016 at 19:27
  • If the agent is running and your ssh supports this option, then yes.
    – Jakuje
    Dec 4, 2016 at 19:28
  • Can you please clarify how I would automate starting the ssh-agent then?
    – timotree
    Dec 4, 2016 at 19:30
  • Basically, as explained in the other answer. [ -z "$SSH_AUTH_SOCK" ] && eval $(ssh-agent)
    – Jakuje
    Dec 4, 2016 at 19:31
  • 1
    On Ubuntu 19.10, I ended up with two instances of ssh-agent, as it appears to come preinstalled (?) - you can check with ps -e | grep 'ssh' to see if it's running. I only needed to add the the AddKeysToAgent yes setting to .ssh/config to make added keys persist between reboots. Feb 7, 2020 at 13:46
11

Add this to ~/.bashrc

This means ssh-agent will be started automatically when you open another session no your terminal

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
fi

if you need a key to be added to the agent also add this

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
 ssh-add ~/.ssh/<your private ssh key>
fi
3
  • 3
    This was a good answer but doesn't explain what the command does.
    – timotree
    Dec 4, 2016 at 21:48
  • How can we persist passphrase?
    – HalfWebDev
    Mar 16, 2022 at 10:46
  • this is critical for AWS EC2 if custom keys are needed Nov 22, 2022 at 9:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.