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


215

我生成了一个没有密码的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.

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

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

有没有密码的方法吗?


9
确保您不在https://github...遥控器中使用。他们还应该遵循git@github...格式。
cjc343

Answers:


419

如果要求您提供用户名和密码,则您的源远程指向的是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

更改URL。


4
这样就解决了,但是我一直在问自己,为什么Github会建议您默认将新存储库的远端指向http URL。我只是从头开始创建了一个存储库,然后向我提供了一个设置https远程URL的选项,而不是git。
Preslav Rachev

2
这是一个快速的一线shell命令,该命令会自动将您的https url更改为适当的git one(仅适用于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:/')
Christopher Shroba

11

另外,对于要点,看来您必须忽略用户名

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

10

如果您确实在使用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_rsaid_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 :-)


5

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

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

Git生成SSH密钥


0

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

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

接下来,不要忘记按如下方式修改远程点:

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

-4

使用命令行:

输入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>

第三步

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

Enter same passphrase again: [Type password again]

抱歉,这个问题不是关于如何创建密钥的问题,而是要设置git以使用密钥而不是身份验证
Sebus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.