使用 ssh-key 无密码推送到 GitHub

Posted

技术标签:

【中文标题】使用 ssh-key 无密码推送到 GitHub【英文标题】:Push to GitHub without a password using ssh-key 【发布时间】:2013-01-23 14:19:41 【问题描述】:

我生成了一个没有密码的 SSH 密钥对,并将公钥添加到 GitHub。

连接

user@dev:/var/www/project# ssh -T git@github.com
Hi User! You've successfully authenticated, but GitHub does not provide shell access.

成功了,当我重命名密钥时,它失败了。

但是当我想要推送我的更改时,它仍然会询问我的用户名和密码组合。

有没有不用密码的推送方式?

【问题讨论】:

确保您没有在遥控器中使用https://github...。他们还应该遵循git@github... 格式。 about-remote-repositories 两种类型: 1. HPPT like https://github.com/user/repo.git 2. SSH, like git@github.com:user/repo.git 【参考方案1】:

如果它要求您提供用户名和密码,那么您的源远程指向的是 HTTPS URL 而不是 SSH URL。

将其更改为 ssh。

例如,像 Git 这样的 GitHub 项目会有一个 HTTPS URL:

https://github.com/<Username>/<Project>.git

还有 SSH 的:

git@github.com:<Username>/<Project>.git

你可以这样做:

git remote set-url origin git@github.com:<Username>/<Project>.git

更改网址。

【讨论】:

这解决了它,但我一直在问自己,为什么 Github 会建议您将新存储库的远程端默认指向 http URL。我刚刚从头开始创建了一个存储库,我看到了一个设置 https 远程 URL 的选项,而不是 git 。 这是一个快速的单行 shell 命令,它会自动将您的 https url 更改为适当的 git 之一(仅适用于 github url!):git remote set-url origin $(git remote show origin | grep "Fetch URL" | sed 's/ *Fetch URL: //' | sed 's/https:\/\/github.com\//git@github.com:/')【参考方案2】:

如果你确实在使用 SSH URL,但在 git push 时仍然被要求输入用户名和密码:

git remote set-url origin git@github.com:<Username>/<Project>.git

您应该尝试使用以下方法进行故障排除:

ssh -vT git@github.com

下面是一段示例输出:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_dsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).

其实我之前已经把公钥加到GitHub了,我本地也有私钥。但是,我的私钥有一个不同的名字,叫做/c/Users/Yuci/.ssh/github_rsa

根据示例输出,Git 正在尝试 /c/Users/Yuci/.ssh/id_rsa,而我没有。因此,我可以简单地将github_rsa 复制到同一目录下的id_rsa

cp /c/Users/Yuci/.ssh/github_rsa /c/Users/Yuci/.ssh/id_rsa

现在当我再次运行ssh -vT git@github.com 时,我有:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Authentication succeeded (publickey).
...
Hi <my username>! You've successfully authenticated, but GitHub does not provide shell access.
...

现在我可以在不询问用户名和密码的情况下推送到 GitHub :-)

【讨论】:

为什么会有人想以任何其他方式进行身份验证,嗯?喜欢这个,谢谢! 您可能不必将密钥复制到其他名称;你可以改用ssh-add 'C:\Users\Yuci\.ssh\github_rsa' 之类的东西。【参考方案3】:

另外,对于要点,您似乎必须省略用户名

git remote set-url origin git@gist.github.com:<Project code>

【讨论】:

【参考方案4】:

像往常一样,创建一个 SSH 密钥并将公钥粘贴到 GitHub。将私钥添加到 ssh-agent。 (我假设这就是你所做的。)

要检查一切是否正确,请使用ssh -T git@github.com

接下来别忘了修改远程点如下:

git remote set-url origin git@github.com:username/your-repository.git

【讨论】:

【参考方案5】:

您必须使用 SSH 版本,而不是 HTTPS。当您从存储库克隆时,请复制 SSH 版本的链接,因为 SSH 易于使用并解决了所有访问问题。您可以为输入到您帐户的每个 SSH 设置访问权限(如推送、拉取、克隆等...)

这是一个链接,它说明了为什么我们需要 SSH 以及如何使用它:一步一步

Git Generate SSH Keys

【讨论】:

【参考方案6】:

与提到的其他用户一样,您必须将其从使用 HTTPS 转换为 SSH。我没有看到端到端解决方案的答案。在setting up the ssh keys 之后,执行(在您的本地机器上):

$ git remote set-url origin git@github.com:username/your_repo.git  # Convert HTTPS -> SSH
$ ssh-add ~/.ssh/id_rsa_github    # add private github ssh key ssh-agent (assuming you have it already running)
$ git push

【讨论】:

【参考方案7】:

你做的一切正常,但 git 仍然通过密码询问,这对我有用,在你当前项目的路径中执行下一个突击队:

~ ssh-add -K ~/.ssh/id_rsaYourIdRsa

将您的 SSH 私钥添加到 ssh-agent 并将您的密码存储在钥匙串中。如果您使用不同的名称创建了密钥,或者如果您要添加具有不同名称的现有密钥,请将命令中的 id_rsaYourIdRsa 替换为您的 private 密钥文件的名称。

【讨论】:

【参考方案8】:

使用命令行:

输入 ls -al ~/.ssh 以查看是否存在现有的 SSH 密钥。

在终端显示:不存在目录

然后生成一个新的 SSH 密钥

第 1 步。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

第 2 步。

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): <here is file name and enter the key>

第 3 步。

Enter passphrase (empty for no passphrase): [Type a password]

Enter same passphrase again: [Type password again]

【讨论】:

对不起,这个问题不是关于如何创建密钥,而是设置 git 使用密钥而不是身份验证

以上是关于使用 ssh-key 无密码推送到 GitHub的主要内容,如果未能解决你的问题,请参考以下文章

使用令牌将一些代码推送到 GitHub -“已删除对密码身份验证的支持”[重复]

Github 项目克隆并推送到临时机器上

如何使用 GITHUB_TOKEN 密钥和 Maven Jib 插件将图像推送到 GitHub 包?

Git 推送到远程仓库

如何在不泄露敏感信息的情况下将 Node-Red 推送到 GitHub?

JS中的RTMP编码器?