2017-10-19 165 views
2

这可能是因为我从根本上误解的东西,但什么是相对于网络协议和认证发生时,我做到以下几点:使用SSH密钥进行git验证然后使用HTTP进行克隆会发生什么?

添加SSH密钥对git的客户端和服务器(例如到​​位桶),然后git clone http://example.git

  • 是HTTP请求中的SSH密钥,因此身份验证和克隆都是通过HTTP连接的SSH密钥进行的?
  • 是否使用SSH进行身份验证,然后以某种方式将克隆关联,但通过HTTP执行?
  • 是使用SSH进行身份验证,然后克隆是SSH内部的HTTP?
  • 我是否无意中通过其他方式进行身份验证,所以SSH密钥甚至没有发挥作用?
  • 别的东西,我还没有考虑过...

回答

2

Git可以使用不同的协议。本地文件,ssh,http(s)(聪明或愚蠢)和git协议。您可以根据您选择的网址选择协议。

每个协议使用自己的身份验证方法,或根本没有。只有使用ssh协议才能使用ssh密钥。不是如果你使用http。

https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols

1

有了不使用SSH密钥的一切,为了使用SSH密钥,你需要通过一个用户名。

如果你在默认目录中没有任何ssh密钥,在这种情况下它可能是〜/ .ssh/id_rsa。

然后你的客户端将与公钥一起检查,如果匹配,它会让你克隆。

为了使用ssh,你需要做[email protected]:/whatever/whatever.git.。无论如何,无论是导致IP地址的域名。然后使用SSH。并会寻找一个SSH密钥。

0

您可以使用SSH或HTTP进行克隆和推送 - 只要服务器支持它(Bitbucket同时支持)。

SSH密钥仅用于SSH验证

2

这取决于您使用远程仓库通信的URL。

通过git clone http://example.git,网址是http://example.git,所以使用http协议和身份验证。 git clone中使用的网址将被存储为默认远程origin的值。命令git remote可以创建,删除,编辑和列出遥控器,包括origin。遥控器有两个值,一个用于推动,另一个用于提取,但在大多数情况下,两者都是相同的。

在需要url的场合,例如git fetch,git pushgit ls-remote,可以使用已存储url的远程服务器。它更短,更容易记住。如果没有远程存储url,那么你需要创建一个然后使用它,或者直接使用url。在克隆的存储库中,git pull origin master相当于git pull http://example.git master

只要远程存储库允许,您可以使用其他协议。在克隆的存储库中,如果ssh url是ssh://[email protected]$host:29418/example.git,那么您可以运行git remote add sshori ssh://[email protected]$host:29418/example.git来创建新的远程文件sshori。现在git pull sshori master相当于git pull ssh://[email protected]$host:29418/example.git master,并且使用ssh协议和认证。同时,现有的origin可以免费使用。在实际情况下,通常使用不同的遥控器在本地存储库和不同的多个远程存储库之间建立隧道。

相关问题