使用ssh-key推送到GitHub而不需要密码

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

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

但当我想要推送更改时,它仍然要求我输入用户名和密码组合。

有没有不用密码就能推的方法?

247923 次浏览

如果它问你用户名和密码,你的源远程指向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。

此外,对于gist,似乎必须省略用户名

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

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

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

Git Generate SSH key

使用命令行:

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

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

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密钥并将公钥粘贴到GitHub。将私钥添加到ssh-agent。(我猜你就是这么做的。)

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

接下来,不要忘记修改远端点,如下所示:

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

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

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

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

与前面提到的其他用户一样,您必须将它从使用HTTPS转换为使用SSH。我没有看到一个端到端的解决方案。设置SSH密钥之后,do(在你的本地机器上):

$ 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

使用SSH你必须使用$ git remote add origin git@github.com:USERNAME/REPOSITORY.git而不是git remote add origin remote_repository_URL。 你可以用$ git remote -v检查它,如果你看到下面格式的两行,它将正确工作:

origin git@github.com:username/repo-name.git (fetch)
origin git@github.com:username/repo-name.git (push)