使用SSH密钥进行git身份验证然后使用HTTP进行克隆会发生什么?

时间:2017-10-19 22:46:34

标签: git ssh ssh-keys

可能是因为我从根本上误解了某些内容,但是当我执行以下操作时,网络协议和身份验证方面发生了什么:

在git客户端和服务器(例如Bitbucket)中添加SSH密钥对,然后git clone http://example.git

  • HTTP请求中是否有SSH密钥,因此身份验证和克隆都是通过HTTP连接并附带SSH密钥进行的?
  • 是使用SSH进行身份验证,然后以某种方式将克隆关联起来,但是通过HTTP执行?
  • 使用SSH进行身份验证,然后克隆是SSH内的HTTP吗?
  • 我是否通过其他方式无意中进行了身份验证,因此SSH密钥甚至没有发挥作用?
  • 我没有考虑的其他事情......

4 个答案:

答案 0 :(得分:2)

Git可以使用不同的协议。本地文件,ssh,http(s)(智能或哑)和git协议。您可以通过所选的URL选择协议。

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

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

答案 1 :(得分:2)

这取决于您用来与远程存储库通信的URL。

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

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

只要远程存储库允许,您就可以使用其他协议。在克隆的存储库中,如果ssh网址为ssh://$username@$host:29418/example.git,则您可以运行git remote add sshori ssh://$username@$host:29418/example.git来创建新的远程sshori。现在git pull sshori master等同于git pull ssh://$username@$host:29418/example.git master,并使用ssh协议和身份验证。同时,现有的origin可以免费使用。在实际情况中,通常使用不同的远程数据库在本地存储库和不同的多个远程存储库之间建立隧道。

答案 2 :(得分:1)

由于你根本没有使用ssh密钥,为了使用ssh密钥,你需要传递一个用户名。

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

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

要使用ssh,您需要执行username@whatever.whatever:/whatever/whatever.git.。无论如何都是导致ip-adress的域名。然后使用SSH。并将寻找SSH密钥。

答案 3 :(得分:0)

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

SSH密钥仅用于SSH身份验证