我使用Git已经有一段时间了,但不断的密码请求开始让我感到很烦。

我使用的是Mac OS X和GitHub,我按照GitHub的设置Git页面的指示设置Git和SSH密钥。

我还将github SSH密钥添加到了我的Mac OS X密钥链中,正如github的SSH密钥密码页面中提到的那样。我的公钥已在Git中注册。

然而,每次我尝试Git拉时,我都必须输入用户名和密码。除了SSH密钥之外,我是否需要为此设置其他东西?


当前回答

在Windows Subsystem for Linux(WSL)上,这是我发现的唯一可行的解决方案:

eval `ssh-agent`; ssh-add ~/.ssh/id_rsa

这是ssh代理未在WSL中正确注册的问题。

其他回答

我想你解决了你的问题,但我看不到能帮我的解决方案,所以就在这里。

键入终端:

echo "" > ~/.ssh/known_hosts

这将清空known_hosts文件,您必须添加您使用过并连接到的每个主机,但这解决了问题。

还要查找是谁向您索要密码。是Git还是SSH代理?

就我而言,每次我做git pull时,它都会问我:

输入密钥“/work/username/.ssh/id_rsa”的密码:

所以我假设是Git要求密码。所以我一直在寻找解决方案,后来才发现我的SSH代理已经关闭。可以使用eval$(ssh-agent)和ssh-add进行修复,如下所示。

我还在下面粘贴了一个小片段,您可以将其添加到~/.bashrc文件(或等效文件)中,以确保SSH代理在登录时启动。

无论如何,这是我犯的一个相当愚蠢的错误,但把它张贴在这里,以防有人像我一样,从找错树上节省一些时间。

# 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

我也有同样的问题。MacOS Mojave钥匙链不断询问密码。为了安全起见,您的id_rsa应该使用密码短语进行加密。然后尝试将其添加到密钥链ssh-add-K~/.ssh/id_rsa

如果密钥位于~/.ssh以外的另一个文件夹中,请用正确的文件夹替换。

Keychain现在知道了你的ssh密钥,希望现在一切正常。

如果您仍然面临这个问题,请尝试

1. brew install keychain

2. echo '/usr/local/bin/keychain $HOME/.ssh/id_rsa' >> ~/.bash_profile
   echo 'source $HOME/.keychain/$HOSTNAME-sh' ~/.bash_profile

3. ssh-add -K ~/.ssh/id_rsa

希望它现在应该起作用了。

更新:-K标志已被弃用。请改用以下方法:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519 # path to private key

根据您的配置,有不同类型的身份验证。以下是一些:

git凭证osxkeychain。如果您的凭据无效,请通过以下方式删除它:git凭据osxkeychain擦除或:printf“protocol=https\nhost=github.com\n”| git凭据osxkeychain擦除因此Git不会再向您请求密钥链权限。然后再次配置。请参阅:在GitHub上从OS X密钥链更新凭据您的SSH RSA密钥。为此,您需要将SSH密钥与添加的密钥进行比较,通过SSH-add-L/sh-add-L检查您是否使用了正确的身份。您的HTTPS身份验证(如果您使用的是HTTPS而不是ssh协议)。使用~/.netrc(Windows上的%HOME%/_netrc)提供凭据,例如。机器存储1.mycompany.com登录myusername密码mypassword

了解更多:在堆栈溢出时与GitHub同步。

如果每次尝试与GitHub交互时,Git都会提示您输入用户名和密码,那么您可能使用的是存储库的HTTPS克隆URL。

使用HTTPS远程URL有一些优点:它比SSH更容易设置,并且通常通过严格的防火墙和代理进行工作。然而,它也会在您每次拉动或推送存储库时提示您输入GitHub凭据。

您可以配置Git为您存储密码。对于Windows:

git config --global credential.helper wincred