Git keeps asking me for my ssh key passphrase
GitSsh AgentGit Problem Overview
I created keys as instructed in the github tutorial, registered them with github, and tried using ssh-agent explicitly — yet git continues to ask me for my passphrase every time I try to do a pull or a push.
What could be the cause?
Git Solutions
Solution 1 - Git
Once you have started the SSH agent with:
eval $(ssh-agent)
Do either:
-
To add your private key to it:
ssh-add
This will ask you your passphrase just once, and then you should be allowed to push, provided that you uploaded the public key to Github.
-
To add and save your key permanently on macOS:
ssh-add -K
This will persist it after you close and re-open it by storing it in user's keychain.
-
To add and save your key permanently on Ubuntu (or equivalent):
ssh-add ~/.ssh/id_rsa
Solution 2 - Git
This has been happening to me after restarts since upgrading from OS X El Capitan (10.11) to macOS Sierra (10.12). The ssh-add
solution worked temporarily but would not persist across another restart.
The permanent solution was to edit (or create) ~/.ssh/config
and enable the UseKeychain
option.
Host *
UseKeychain yes
Related: macOS keeps asking my ssh passphrase since I updated to Sierra
Solution 3 - Git
If you've tried ssh-add
and you're still prompted to enter your passphrase then try using ssh-add -K
. This adds your passphrase to your keychain.
Update: if you're using macOS Sierra then you likely need to do another step as the above might no longer work. Add the following to your ~/.ssh/config
:
Host *
UseKeychain yes
Solution 4 - Git
I would try the following:
- Start GitBash
- Edit your
~/.bashrc
file - Add the following lines to the 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
4. Save and close the file 5. Close GitBash
- Reopen GitBash
- Enter your passphrase
Solution 5 - Git
What worked for me on Windows was (I had cloned code from a repo 1st):
eval $(ssh-agent)
ssh-add
git pull
at which time it asked me one last time for my passphrase
Credits: the solution was taken from https://unix.stackexchange.com/questions/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket
Solution 6 - Git
Try adding this to your ~/.ssh/config:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
... assuming your private key is named id_rsa
Solution 7 - Git
If the above solutions are not working for me, one thing to check is that you actually have the public key too (typically id_rsa.pub
). It is unusual not to, but that was the cause for me.
To create your public key from your private key:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Solution 8 - Git
Run the following:
eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa &>/dev/null
Enter the passphrase, then check git. Git should not ask for passphrase after this command.
The original source: https://gist.github.com/egoens/c3aa494fc246bb4828e517407d56718d
Solution 9 - Git
I had a similar issue, but the other answers didn't fix my problem. I thought I'd go ahead and post this just in case someone else has a screwy setup like me.
It turns out I had multiple keys and Git was using the wrong one first. It would prompt me for my passphrase, and I would enter it, then Git would use a different key that would work (that I didn't need to enter the passphrase on).
I just deleted the key that it was using to prompt me for a passphrase and now it works!
Solution 10 - Git
If you are not using GitBash and are on Windows - you need to start your ssh-agent using this command
start-ssh-agent.cmd
If your ssh agent is not set up, you can open PowerShell as admin and set it to manual mode
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Solution 11 - Git
It sounds like you may be having trouble with SSH-Agent itself. I would try troubleshooting that.
-
Did you do ssh-add to add your key to SSH?
-
Are you closing the terminal window between uses, because if you close the window you will have to enter the password again when you reopen it.
Solution 12 - Git
For Windows or Linux users, a possible solution is described on GitHub Docs, which I report below for your convenience.
You can run ssh-agent
automatically when you open bash or Git shell. Copy the following lines and paste them into your ~/.profile
or ~/.bashrc
file:
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
If your private key is not stored in one of the default locations (like ~/.ssh/id_rsa
), you'll need to tell your SSH authentication agent where to find it. To add your key to ssh-agent, type ssh-add ~/path/to/my_key
.
Now, when you first run Git Bash, you are prompted for your passphrase. The ssh-agent
process will continue to run until you log out, shut down your computer, or kill the process.
Solution 13 - Git
I try different solutions but nothing help. But this steps (My GitBash SSH environment always asks for my passphrase, what can I do?) from Bitbucket.com seams works well :
The idea is:
-
you create
~/.bashrc
file -
add follow script:
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
-
re-run Bash
Solution 14 - Git
Another possible solution that is not mentioned above is to check your remote with the following command:
git remote -v
If the remote does not start with git but starts with https you might want to change it to git by following the example below.
git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
Solution 15 - Git
In case you are on Win10:
I had the same problem. (previously had to update ssh-agent individually with a script from here because of a different problem)
Git did access my ssh config (git pull threw exceptions when I had nonsense-lines in ssh config), but never seemed to care about the private key I had added via ssh-agent and referenced in my config.
What fixed the problem was to execute the following command in PowerShell:
git config core.sshCommand (get-command ssh).Source.Replace('\','/')
(Details are in this link)
Solution 16 - Git
on mac, if your ssh key need passphrase everytime and you want to skip it, then you can try below, it works fine for me
- eval "$(ssh-agent -s)"
- ssh-add -K .ssh/id_rsa
- add this default ssh configuration works for me
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
Solution 17 - Git
Update the url of the origin remote using SSH instead of HTTPS;
git remote set-url origin "SSH URL COPIED FROM GIT REPO."
This what works with me.
Solution 18 - Git
If you happen to be using fish, there's a gist for it:
# config.fish
if not pgrep -f ssh-agent > /dev/null
eval (ssh-agent -c)
set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
set -Ux SSH_AGENT_PID $SSH_AGENT_PID
set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
end
Solution 19 - Git
previously -K flag is used to add key but now:
ssh-add --apple-use-keychain
The -K and -A flags are deprecated and have been replaced by the --apple-use-keychain and --apple-load-keychain flags, respectively.
Solution 20 - Git
Seems that your local repo hasnt updated with ssh keys...at least this is what happened to me when going from https to ssh.
Have you done a remote reset?
git remote set-url origin <ssh url>
Solution 21 - Git
Maybe not the most secure way to fix this, but simply do not set a passphrase, it is optional. If you don't set a passphrase, it will not ask for it. You can change the passphrase with
$ ssh-keygen -p -f ~/.ssh/id_ed25519
> Enter old passphrase: [Type old passphrase]
> Key has comment '[email protected]'
> Enter new passphrase (empty for no passphrase): [Type new passphrase]
> Enter same passphrase again: [Repeat the new passphrase]
> Your identification has been saved with the new passphrase.