23

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.

  • 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 '16 at 18:55
  • What error you got? – Jakuje Dec 4 '16 at 19:05
  • @Jakuje The error was about a missing pubkey and asked "Have you started ssh-agent?". – timotree Dec 4 '16 at 19:28
28

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.

  • So you're saying if I enable AddKeysToAgent, then whenever I type eval "$(ssh-agent -s)" it will add my key? – timotree Dec 4 '16 at 19:27
  • If the agent is running and your ssh supports this option, then yes. – Jakuje Dec 4 '16 at 19:28
  • Can you please clarify how I would automate starting the ssh-agent then? – timotree Dec 4 '16 at 19:30
  • Basically, as explained in the other answer. [ -z "$SSH_AUTH_SOCK" ] && eval $(ssh-agent) – Jakuje Dec 4 '16 at 19:31
  • Does that work with zsh? – timotree Dec 4 '16 at 19:32
6

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
  • 1
    This was a good answer but doesn't explain what the command does. – timotree Dec 4 '16 at 21:48

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.