使用ssh-key推送到没有密码的github

Seb*_*bus 199 github ssh-keys

我生成了一个没有密码的密钥对,并将公钥添加到github.与...连接

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

是成功的,当我重命名密钥时,它失败了.但是,当我想推动我的更改时,仍然会问我的用户名/密码组合.

有没有办法没有密码推?

man*_*lds 394

如果它要求您输入用户名和密码,则您的原始远程指针指向https网址而不是ssh网址.

将其更改为ssh.

例如,像Git这样的github项目将具有https url

https://github.com/<Username>/<Project>.git
Run Code Online (Sandbox Code Playgroud)

和ssh一:

git@github.com:<Username>/<Project>.git
Run Code Online (Sandbox Code Playgroud)

你可以做:

git remote set-url origin git@github.com:<Username>/<Project>.git
Run Code Online (Sandbox Code Playgroud)

改变网址.

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

小智 9

此外,对于要点,似乎你必须省略用户名

git remote set-url origin git@gist.github.com:<Project code>
Run Code Online (Sandbox Code Playgroud)


Yuc*_*uci 7

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

git remote set-url origin git@github.com:<Username>/<Project>.git
Run Code Online (Sandbox Code Playgroud)

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

ssh -vT git@github.com
Run Code Online (Sandbox Code Playgroud)

下面是一个示例输出:

...
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).
Run Code Online (Sandbox Code Playgroud)

实际上,我之前已经将公共密钥添加到了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
Run Code Online (Sandbox Code Playgroud)

现在,当我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.
...
Run Code Online (Sandbox Code Playgroud)

现在,我无需输入用户名和密码即可推送到GitHub :-)


小智 6

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

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

接下来不要忘记修改远程点如下:

git remote set-url origin git@github.com:username/your-repository.git
Run Code Online (Sandbox Code Playgroud)


Haz*_*yan 5

你必须使用SSH版本不是HTTPS.当你从库中克隆,复制与链接SSH版本,因为SSH易于使用,并解决了与access.You所有问题都可以设置为每SSH您输入到您的帐户的访问(如推,拉,克隆等...)

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

Git生成SSH密钥


mar*_*ifi 5

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

origin git@github.com:username/repo-name.git (fetch)
origin git@github.com:username/repo-name.git (push)
Run Code Online (Sandbox Code Playgroud)