Git如何使用SSH密钥和用户名进行克隆

85

我有以下内容,需要在Windows终端命令提示符或Linux中克隆存储库。

  • URL:git@xxxxx.com:xxx/xxx/git
  • 用户名:xxx@xxx.in
  • SSH密钥:ssh-rsa AAAAB3NzaC1yxxxxxxxxxxxx....xxx@xxx.in

我尝试了以下方法:

git clone git@xxxxx.com:xxx/xxx/git

我理解

Permission denied(public key)
Couldn't read from remote repository

尝试更改URL为:

git clone https://xxxxx.com:xxx/xxx/git

你是否已经将 ~/.ssh/id_rsa.pub 添加到你的账户配置文件中(例如 GitHub、BitBucket)? - Sajib Khan
我们没有访问账户资料的权限...这些细节是由客户共享的,我们只需要将我们的代码克隆到他们的Github即可。 - Sushivam
4个回答

242

如果你总是迟迟才回答任何问题,可能是因为你拥有多个 SSH 密钥,若未指定,Git 将尝试使用 id_rsa。但如果你需要使用另一个密钥,则可以使用以下命令:

git clone git@provider.com:userName/projectName.git --config core.sshCommand="ssh -i ~/location/to/private_ssh_key"

使用这种方式,它将应用此配置并在实际从git存储库获取任何数据之前使用与id_rsa不同的密钥。

后续的fetchpush将使用指定的密钥对克隆的存储库进行身份验证。

希望对任何人有所帮助。


4
但是它会与递归子模块产生问题。 - rundekugel
克隆后,初始化子模块无法工作。有什么解决方法吗? - wrapperapps
2
嗯,子模块的问题有点不同于我最初尝试解决的那个问题,但基本上你需要覆盖每个子模块内部的.git/config文件,并将sshCommand更正为子模块所需的内容。 您可以在此处阅读文档以获得更好的解释:https://git-scm.com/docs/git-config#_configuration_file - Wiston Coronell
你可以将以下代码添加到你的 ~/.profile 中,为每个仓库/组织设置特定的 git "别名"。function git-company(){git ${@:1} --config core.sshCommand="ssh -i ~/.ssh/company_private_key"}这样就可以使用 git-company 代替需要 company_private_key 的 git 仓库。所有参数都会透明地传递。 - Draco
我发现(这可能是特定于 BitBucket 的)即使使用私有 SSH 密钥,仓库也不能是私有的才能克隆它。 - jaques-sam

62

我建议您按照以下步骤操作:

第一步:检查是否存在SSH密钥

$> ls -al ~/.ssh

您是否看到名为id_rsaid_rsa.pub的文件?

如果是,请转到第3步

如果没有,您需要生成它们

第二步:生成新的SSH密钥

$> ssh-keygen -t rsa -b 4096 -C "yourEmail"

将您的SSH密钥添加到ssh-agent

$> eval "$(ssh-agent -s)"

$> ssh-add ~/.ssh/id_rsa

第三步.1:将SSH密钥添加到您的GIT帐户中。

获取您的公钥

$> cat ~/.ssh/id_rsa.pub

进入您的GIT项目->设置->SSH密钥

然后将您的公钥内容粘贴到SSH密钥中

第三步.2:强制SSH客户端使用给定的私钥

当您无法在Git帐户上设置密钥时,这是另一种解决方案

$> sudo nano ~/.ssh/config

然后更改此行

IdentityFile <yourPrivateKey>

第四步:克隆项目

$> git clone git@xxxxx.com:xxx/xxx/git


有没有其他的 Step3 替代方法,因为我们没有 GIT 账户的访问权限,只有我问题中指定的详细信息,我猜我无法访问 Git 账户...此外,我有 ssh 密钥内容(我猜它是 id_rsa.pub 的内容)...所以我创建了一个文件夹,文件名为 id_rsa.pub,并粘贴了我拥有的内容... - Sushivam
这里是程序设计相关内容的翻译:这是我的结构,我在Windows本地驱动器中有一个文件夹:C/Users/me/Test/.ssh。在我的ssh文件夹中,我有.id_rsa文件,并且当我键入cat ~/.ssh/config时,我会得到“没有这样的文件”提示。 - Sushivam
1
请注意,虽然 id_rsa 是 ssh 密钥的默认名称,但它们不一定要这样命名。 - Nathaniel Ford
这并不从问题所在的地方开始。用户已经提供了一个SSH密钥。你并没有真正回答他的问题。 - Kevin Buchs
如果 ~/.ssh/config 文件为空,则仅添加 IdentityFile id_rsa 将不起作用,您需要使用以下语法:Host github.com User git Hostname github.com IdentityFile id_rsa ... 参考链接 我想编辑答案,但编辑队列已满... - ForeverLearning
显示剩余5条评论

9

通过GitHub测试ssh以获得可执行反馈。

在命令行中运行ssh -T git@github.com
(请参见https://help.github.com/articles/testing-your-ssh-connection/)


如果可以正常工作,则应该先使用git。但很可能会出现问题。

要克隆,请使用git clone git@github.com:$USERNAME / $REPONAME.git


2
并没有真正回答所问的问题。 - Kevin Buchs

-13

如果不使用ssh克隆源代码,我们可以使用以下格式的http url:

http://usernameWITHOUTdomain:password@the_rest_httpURL

例如:http://myname:password@192.110.110.10/projectname/project.git


5
这是使用HTTP,而不是SSH。 - bschlueter
2
当然可以,但是你说的是“使用ssh克隆Git源代码”,而示例并不是这样做的。 - bschlueter
1
这不遵循ssh协议 - 不是一个解决方案。 - Kevin Buchs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接