Enter SSH passphrase once
Update: seems to be a bug from 13.10:
https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169
Anyway running the following commands the problem was fixed for me:
How to fix
I fixed this by entering the following commands:
$ ssh-agent bash
This creates a new bash process that allows you to add private keys. When adding a new private key you will be prompted for the passphrase once and only once.
And then:
$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
...where username
is your username. You can do the same using $USER
variable:
$ ssh-add /home/$USER/.ssh/id_rsa
Alternatively, just use ~
for your home directory.
$ ssh-add ~/.ssh/id_rsa
And the problem was fixed.
0) Short answer
Add in your .ssh/config
one line at the beginning:
AddKeysToAgent yes
and run git/ssh/... If it's not enough, check your ssh version and check that ssh-agent is loaded with these instructions:
1) Check the openssh version
Firstly check that your ssh version, it must be greater of equal to 7.2:
ssh -V
2) Edit the config file
If it's the case just add in your .ssh/config
one line at the beginning:
AddKeysToAgent yes
3) Check if ssh-agent is already open
Usually distributions automatically load an ssh-agent. To check it, run
ps aux | grep -v grep | grep ssh-agent
If you don't see any line containing it, you need to load it by running:
eval $(ssh-agent)
Note that this enable the agent only on the current terminal, so to enable it everywhere, you can try to add this line in your ~/.profile
file and reboot.
This Atlassian document (archive.org backup) fixed the issue for me on Ubuntu 14.04 Server Edition:
Just add this values into your .bashrc
file:
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
And after logging in, it asks for password only once and it caches. You don't need to enter it each time.