How to prevent that the password to decrypt the private key has to be entered every time when using Git Bash on Windows? How to prevent that the password to decrypt the private key has to be entered every time when using Git Bash on Windows? git git

How to prevent that the password to decrypt the private key has to be entered every time when using Git Bash on Windows?


For Windows users, just a note that this is how I set up the Git Bash environment to log me in once when I start it up. I edit my ~/.bashrc file:

eval `ssh-agent`ssh-add

So when I start Git Bash, it looks like:

Welcome to Git (version 1.7.8-preview20111206)(etc)Agent pid 3376Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

And now I can ssh to other servers without logging in every time.


This answer explains how to get the GitHub username and password to be stored permanently, not the SSH key passphrase.

In Windows, just run

$ git config --global credential.helper wincred

This means that the next time you push, you'll enter your username and password as usual, but they'll be saved in Windows credentials. You won't have to enter them again, after that.

As in, Push to GitHub without entering username and password every time (Git Bash on Windows).


I prefer not to have to type my SSH passphrase when opening new terminals; unfortunately starmonkey's solution requires the password to be typed in for every session. Instead, I have this in my .bash_profile file:

# Note: ~/.ssh/environment should not be used, as it#       already has a different purpose in SSH.env=~/.ssh/agent.env# Note: Don't bother checking SSH_AGENT_PID. It's not used#       by SSH itself, and it might even be incorrect#       (for example, when using agent-forwarding over SSH).agent_is_running() {    if [ "$SSH_AUTH_SOCK" ]; then        # ssh-add returns:        #   0 = agent running, has keys        #   1 = agent running, no keys        #   2 = agent not running        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]    else        false    fi}agent_has_keys() {    ssh-add -l >/dev/null 2>&1}agent_load_env() {    . "$env" >/dev/null}agent_start() {    (umask 077; ssh-agent >"$env")    . "$env" >/dev/null}if ! agent_is_running; then    agent_load_envfi# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need# to paste the proper path after ssh-addif ! agent_is_running; then    agent_start    ssh-addelif ! agent_has_keys; then    ssh-addfiunset env

This will remember my passphrase for new terminal sessions as well; I only have to type it in once when I open my first terminal after booting.

I'd like to credit where I got this; it's a modification of somebody else's work, but I can't remember where it came from. Thanks anonymous author!

Update 2019-07-01: I don't think all this is necessary. I now consistently have this working by ensuring my .bash_profile file runs the ssh-agent:

eval $(ssh-agent)

Then I set up an ssh configuration file like this:

touch ~/.ssh/configchmod 600 ~/.ssh/configecho 'AddKeysToAgent yes' >> ~/.ssh/config