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

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

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

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


当前回答

配置凭据帮助程序

在OS X(现在是macOS)上,在终端中运行此命令:

git config --global credential.helper osxkeychain

它使Git能够使用文件Keychain.app来存储用户名和密码,并从密钥链中检索私有SSH密钥的密码短语。

对于Windows使用:

git config --global credential.helper wincred

对于Linux使用:

git config --global credential.helper cache // If you want to cache the credentials for some time (default 15 minutes)

OR

git config --global credential.helper store // if you want to store the credentials for ever (considered unsafe)

注意:第一种方法将在内存中缓存凭据,而第二种方法将以纯文本格式将它们存储在~/.git凭据中。

查看此处了解有关Linux方法的更多信息。查看此处以了解有关这三个方面的更多信息。

故障排除

如果Git凭据助手配置正确,macOS会将密码保存在密钥链中。有时SSH和密钥链中存储的密码之间的连接可能会中断。运行ssh-add-K或ssh-add ~/.ssh/id_rsa将密钥再次添加到密钥链。

macOS v10.12(Sierra)对ssh的更改

对于macOS v10.12(Sierra),每次重新启动后都需要运行ssh add-K。要避免这种情况,请使用此内容创建~/.ssh/config。

Host *
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_rsa

从10.12.2的ssh_config手册页:

使用钥匙链

在macOS上,指定当尝试使用特定密钥时,系统是否应在用户的密钥链中搜索密码短语。当用户提供密码短语时,此选项还指定密码短语在验证正确后是否应存储到密钥链中。参数必须为“yes”或“no”。默认值为“no”。

苹果增加了Technote 2449,解释了发生的事情。

在macOSSierra之前,ssh将显示一个对话框,询问您的密码,并提供将其存储到密钥链中的选项。此UI在一段时间前被弃用,现已删除。

其他回答

还要查找是谁向您索要密码。是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

在windows机器中:安装GitHub CLI

choco install gh

然后运行命令:

gh auth login

并遵循说明

您也可以点击此链接:

https://cli.github.com/manual/gh_auth_login

Windows和GitHub使用SSH推/拉Git指南:Windows Git图解指南

下载并安装PuTTY设置环境变量“GIT_SSH”=“path\to\plink.exe”(在已安装的腻子文件夹中)-非常重要!!!重新启动Windows资源管理器以使环境变量生效(不能仅重新启动命令提示符)运行puttygen.exe生成新密钥,将公钥复制到GitHub站点将此新私钥保存在磁盘上的安全位置(最好不要Dropbox)运行putty.exe并将SSH连接到github.co通过运行“shell:startup”快速进入启动文件夹。通过选美让您的私钥启动Windows。使用语法“path\to\pageage.exe”“path \to\privatkey”在Startup文件夹中创建快捷方式我们不需要在存储库的.git/config中设置“puttykeyfile”设置非常重要的是,使用的是GitHub的“SSH克隆URL”,而不是HTTPS。

在Windows for Git 1.7.9+中,在命令提示符下运行以下命令以在文本编辑器中打开配置文件:

git config --global --edit

然后在文件中,添加以下块(如果不存在)或相应地进行编辑:

[credential "https://giturl.com"]
username = <user id>
helper = wincred

保存并关闭文件。在上述更改后,您只需提供一次凭据。

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

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

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