如何配置命令行git使用ssh密钥

13

当我通过命令行执行git pull时,它总是要求输入我的GitHub用户名和密码。我想告诉它使用GitHub中的ssh密钥,并且永远不用再担心这个问题。您该如何处理?


你想让Git使用你的客户端SSL证书吗?这将需要让远程服务(例如GitHub)知道你的SSL证书。你可以通过使用SSH密钥而不是HTTP来获得“永远不必再担心它”的体验。请注意,你需要更改远程设置,使其使用git@github...而不是https://... - Chris
啊,是的,术语用错了。我发誓我不是那么菜鸟。已更新正确信息。 - Tyler
我在 GitHub 上有一个密钥,并将其集成到我的 GUI/IDE 中。 - Tyler
1
然后你可以尝试更改你的远程仓库,看看是否有效:假设你的远程仓库叫做 origin,并且你有一个相对较新的 Git 版本,运行 git remote set-url origin git@github...git remote set-url --push origin git@github...。从 GitHub 上通过点击克隆 URL 的 SSH 链接获取 git@github... 部分。如果这样还不行,你可能需要 (a) 在 GitHub 上添加第二个密钥,或者 (b) 让你的命令行 git 知道你在 IDE 中使用的密钥。 - Chris
5个回答

15

如果要让Git使用你生成的密钥,请将以下内容添加到你的ssh配置文件中(在Linux上,通常位于~/.ssh/config):

Host github.com
  User git
  IdentityFile ~/.ssh/id_rsa

对于IdentityFile,您应该使用由ssh-keygen生成的密钥(而不是名称以.pub结尾的密钥)。User 必须始终为git


这是我的问题。我尝试了ssh-agent和其他方法,但是这个配置文件解决了它。 - Lacrosse343
这应该是顶级答案,因为它回答了每个人都真正关心的问题。如何使用本地密钥,有能力使用谷歌的人不必询问如何将密钥粘贴到Github中。 - monamona
这个方法对我起作用了!我给我的密钥取了一个与默认的 id_ed25519 不同的名字,并且设置了密码保护,所以这两个因素中的一个或者两个导致我的 Github 密钥没有自动添加到代理中。现在,如果我执行 git pull 这样的操作,它会提示我输入密码,然后将密钥添加到代理中!谢谢! - undefined

12
假设您已经使用ssh-keygen生成了一对密钥,并将公钥上传到您的GitHub账户的适当位置,那么您应该能够将远程设置为使用URL git@github.com:username/repo.git
git remote set-url origin git@github.com:username/repo.git

如果你没有在本地做过任何改动,那么你可以直接删除本地仓库并重新克隆:
git clone git@github.com:username/repo.git

这里是关于该设置的Github指南,您可以根据需要参考。

7
互联网上到处都有如何将生成的密钥复制到 GitHub 账户的教程。但是,你的问题仍然没有包括如何使用私钥的答案。"现在我创建了私钥,git 如何知道在哪里获取它?" - Binar Web
@BinarWeb 您可以提出修改建议。我认为我可能误解了问题。 - merlin2011

1

另一种可能性是,在创建ssh之后,您可能已将密钥移动到不同的文件夹中。在这种情况下, ssh-add ~/yourkeyfolder/yourkey

这将确保操作系统知道您的密钥。


0
看了这些答案,似乎我觉得最简单的方法没有包括在内。在你感兴趣的仓库的工作目录中,指定一个特定的键,可以这样做:
git config core.sshCommand 'ssh -i ~/.ssh/id_rsa'  #specific private key

你可以检查一下是否成功(或者查看存储库是否存在core.sshCommand)通过执行以下操作:
git config --list

0
如果您使用基于Gnome的Linux桌面,比如Ubuntu或Fedora,您还可以使用内置的“密码和加密”应用程序来创建和管理SSH密钥。要创建一个SSH密钥,只需打开该应用程序,点击“+”,然后选择“SSH密钥”,填写表格,两次输入密钥的密码,最后将生成的公钥信息插入GitHub中。之后,git命令将使用此SSH密钥进行SSH连接。您每个会话只需要输入一次SSH密钥的密码。在这种情况下,无需配置ssh-agent或修改~/.ssh/config文件,它就能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接