How to permanently add a private key with ssh-add on Ubuntu? [closed]
Solution 1:
A solution would be to force the key files to be kept permanently, by adding them in your ~/.ssh/config
file:
IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer
If you do not have a 'config' file in the ~/.ssh directory, then you should create one. It does not need root rights, so simply:
nano ~/.ssh/config
...and enter the lines above as per your requirements.
For this to work the file needs to have chmod 600. You can use the command chmod 600 ~/.ssh/config
.
If you want all users on the computer to use the key put these lines into /etc/ssh/ssh_config
and the key in a folder accessible to all.
Additionally if you want to set the key specific to one host, you can do the following in your ~/.ssh/config :
Host github.com
User git
IdentityFile ~/.ssh/githubKey
This has the advantage when you have many identities that a server doesn't reject you because you tried the wrong identities first. Only the specific identity will be tried.
Solution 2:
I solved that problem on Mac OSX (10.10) by using -K option for ssh-add:
ssh-add -K ~/.ssh/your_private_key
For macOS 10.12 and later you need to additionally edit your ssh config as described here: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
Solution 3:
This didn't answer the same issue for me under Mac OS X Lion. I ended up adding:
ssh-add ~/.ssh/id_rsa &>/dev/null
To my .zshrc (but .profile would be fine too), which seems to have fixed it.
(As suggested here: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )
Solution 4:
Just add the keychain, as referenced in Ubuntu Quick Tips https://help.ubuntu.com/community/QuickTips
What
Instead of constantly starting up ssh-agent and ssh-add, it is possible to use keychain to manage your ssh keys. To install keychain, you can just click here, or use Synaptic to do the job or apt-get from the command line.
Command line
Another way to install the file is to open the terminal (Application->Accessories->Terminal) and type:
sudo apt-get install keychain
Edit File
You then should add the following lines to your ${HOME}/.bashrc or /etc/bash.bashrc:
keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
Solution 5:
I tried @Aaron's solution and it didn't quite work for me, because it would re-add my keys every time I opened a new tab in my terminal. So I modified it a bit(note that most of my keys are also password-protected so I can't just send the output to /dev/null):
added_keys=`ssh-add -l`
if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
ssh-add "$HOME/.ssh/my_key"
fi
What this does is that it checks the output of ssh-add -l
(which lists all keys that have been added) for a specific key and if it doesn't find it, then it adds it with ssh-add
.
Now the first time I open my terminal I'm asked for the passwords for my private keys and I'm not asked again until I reboot(or logout - I haven't checked) my computer.
Since I have a bunch of keys I store the output of ssh-add -l
in a variable to improve performance(at least I guess it improves performance :) )
PS: I'm on linux and this code went to my ~/.bashrc
file - if you are on Mac OS X, then I assume you should add it to .zshrc
or .profile
EDIT:
As pointed out by @Aaron in the comments, the .zshrc
file is used from the zsh
shell - so if you're not using that(if you're not sure, then most likely, you're using bash
instead), this code should go to your .bashrc
file.