git: osxkeychain credential helper silently fails

2019-03-18 13:43发布

问题:

This page and many like it gives instructions for setting up the osxkeychain credential helper with git. I've followed these instructions; everything seemed to work fine. I can see that my username and password in the Keychain Access application are correct and that git-credential-osxkeychain has access to the github.com record. When I type git config -l I can see the entry credential.helper=osxkeychain as well as correct user.name and user.email entries. When I run git credential-osxkeychain I see the usage message I'm apparently supposed to. At no point do I receive an error message. Everything seems to be setup correctly.

However, no matter how many times I git push a particular repository, it always asks for my username and password. Entering the username and password found in my Keychain Access entry works; so it does not appear to be a login issue. Additionally, when I type git credential-osxkeychain erase (or git-credential-osxkeychain erase), the command hangs silently and, as far as I can tell, indefinitely.

I have, as of yet, been unable to find anything documenting this issue. This question raises a similar issue, but my git version is 2.6.4, so the solution is not helpful. Why is it doing this and how do I get git to remember my username and password with the osxkeychain credential helper?

I'm using Mac OS X 10.11.4 and git version 2.6.4.

回答1:

Edit ~/.ssh/config and add UseKeychain yes to every host you want the Keychain to remember the password for.

For example, if you are trying to do this for GitHub:

Host github.com
    IdentityFile ~/.ssh/your_github_cert_rsa
    UseKeychain yes

If you want to enable it for every host, just add:

Host *
    UseKeychain yes

This is a new requirement, added by Apple on macOS Sierra 10.12.2, you can learn more about it running man ssh_config in 10.12.2:

UseKeychain

             On macOS, specifies whether the system should search for
             passphrases in the user's keychain when attempting to use a par-
             ticular key. When the passphrase is provided by the user, this
             option also specifies whether the passphrase should be stored
             into the keychain once it has been verified to be correct.  The
             argument must be ``yes'' or ``no''.  The default is ``no''.

Under Mac OS 10.11, you can check if the keychain is disabled with the variable

KeychainIntegration
  Specifies whether to enable Keychain support on Mac OS X.  
  If Keychain support is enabled, then passwords for identities can be 
  managed via the Mac OS X Keychain.
  The value for this keyword must be ``yes'' or ``no''.  The default is ``yes''.
AskPassGUI
  Show the system password prompt