为什么我可以从一台机器克隆,而不是从另一台机器克隆?

时间:2013-09-04 12:11:45

标签: git gitlab

我在自己的域上有自己的gitlab设置。我一直在使用gitbash在我的Windows桌面上愉快地使用它。我一直在通过Gitlab Web前端创建repos,然后从我的本地机器上推送我的代码库,就像这样;

git remote add origin gitlab_user@my.gitlab.domain:my_namespace/my_repo.git

我也可以像这样克隆;

git clone gitlab_user@my.gitlab.domain:my_namespace/my_repo.git my_repo

在我的桌面上执行其中任何一项都没有问题。

如果我尝试从centOS框(也就是托管我的gitlab域的那个框)做同样的事情,虽然它可能并不总是如此)我被提示输入gitlab_user密码。在此之后,相同的clone命令告诉我my_namespace / my_repo.git似乎不是git存储库。我知道这是因为我从我的Windows机器上访问它没有任何问题。

当我从其他地方连接时,为什么它没有将它视为回购的任何想法,为什么要求输入密码?

2 个答案:

答案 0 :(得分:3)

解决方案

总之,确实是因为我没有将我的.ssh公钥添加到gitlab中的用户帐户。解决这个问题的步骤是:

  1. 以我想要克隆的用户身份登录到我的Linux机器上。我专门为此创建了一个用户。
  2. ssh-keygen -t rsa -C "newuser@my.domain.com" - (-C部分是一个评论,可以帮助我解决这个问题,如果我忘记的话。)
  3. 使用cat ~/.ssh/id_rsa.pub
  4. 复制公钥的内容(虽然仍以新用户身份登录到linux框中)
  5. 登录gitlab(作为有权访问您要克隆的项目的用户),并通过粘贴您在步骤4中复制的公钥,将此ssh密钥添加到帐户。
  6. 现在我可以使用原始命令进行克隆;

    git clone gitlab_user@my.gitlab.domain:my_namespace/my_repo.git my_repo
    

    我学到了什么

    我将始终最初以用户 gitlab_user 连接到我的gitlab服务器。但到达后,gitlab将通过将我的公钥与存储在其数据库中的其中一个帐户存储的公钥相匹配来识别我声称的用户帐户。 这就是为什么你不能将相同的.ssh密钥附加到多个gitlab帐户的原因 - gitlab在你连接时不会知道你是谁。

    但是,您可以在一个帐户中放置多个(不同的)密钥。例如,我需要能够从家里和办公室访问repo,但每次都被识别为相同的gitlab用户。我这样做是通过在家创建.ssh键并将其添加到我的gitlab帐户,并在工作中做同样的事情。两个不同的键,将我识别为相同的gitlab用户。

答案 1 :(得分:1)

检查你的centOs~ / .ssh中是否有ssh密钥,但如果你没有,我不建议你复制windows%HOME /。ssh上的那些密钥。

生成一对新密钥,并在GitLab ssh配置页面中注册您的公共ssh密钥。
您可以在this gitlabhq-recipe script

中查看示例
ssh-keygen -q -N '' -t rsa -f ~/.ssh/id_rsa

我喜欢start with a key without a passphrase first

ssh-keygen -t rsa -f "$HOME/.ssh/gitlab" -C "GitLab access (not interactive)" -q -P ""

但是对于非传统名称,我add a ~/.ssh/config file

Host gilab
    HostName my.gitlab.domain
    User gitlab_user
    IdentityFile ~/.ssh/gitlab

在这种情况下,我可以克隆:

,而不是克隆gitlab_user@my.gitlab.domain:my_namespace/my_repo.git
git clone gitlab:my_namespace/my_repo.git