做'git clone'时Git不使用SSH

时间:2014-01-29 20:44:15

标签: git bitbucket redhat

我在RedHat中使用BitBucket和SSH。

由于我在公司防火墙后面,我正在使用 corkscrew 来使用我们的代理并登录。

当我这样做时:

ssh -T bitbucket.org

一切正常,我得到了

Logged in as username. You can use git or hg to connect to Bitbucket. Shell access is disabled.

但是当我尝试从我的回购中克隆时:

git clone git@bitbucket.org:myUser/myRepo.git

我明白了:

ssh: Could not resolve hostname bitbucket.org: Name or service not known
fatal: The remote end hung up unexpectedly

repo设置为SSH,我可以使用与Git Bash完全相同的设置从我的Windows机器克隆。

我错过了什么?

更新1:如下所述,git clone根本没有使用我的SSH配置。我可以直接运行ssh并且它可以工作,但git clone甚至无法连接到服务器。为什么git不使用SSH?

2 个答案:

答案 0 :(得分:3)

问题是您在git clone下运行sudo,这意味着您在root帐户下运行,而不是在您自己的帐户下运行。

由于您未在自己的用户帐户下运行,git无法访问您帐户的ssh配置。 git clone命令正在使用ssh,它只是将其与root帐户的设置一起使用,而不是与您的设置一起使用。

您在评论中说您正在克隆到Apache根文件夹的子目录中。该文件夹归root帐户所有,因此当然您的帐户无权写入该帐户。

一般情况下,您不应将root帐户用于非root帐户中的任何操作,只是为了安全起见。如果您可以从自己的用户帐户运行git clone命令,那么执行破坏系统的操作的风险会降低, ssh将使用您的个人配置。 (修改root的ssh配置将完成这项工作,但我认为这不是一个好主意。)

如果您想避免将git命令作为root运行,则需要将git clone放入您有权写入的目录中。

一种解决方案是,在Apache根目录下创建目录后,使用sudo chown将该目录的所有权更改为您的帐户。然后,您就可以写入该目录,包括在没有git clone的情况下运行sudo

或者您可以使用sudo chown将目录的所有权更改为您所属的某个组 - 可能是为此目的创建的组。然后使用chmod g+w授予组写入权限。现在,即使它仍归root所有,您也可以写入该目录。

或者您可以克隆到主目录的子目录中,然后使用sudo ln -s创建指向Apache根目录下目录的符号链接。 (这样做的一个缺点是,通过查看您的主目录下,Apache依赖于此子目录并不明显。)

答案 1 :(得分:0)

结果git clone正在使用全局SSH设置而不是我的用户设置。所以我必须在/etc/ssh/创建新密钥,并在/etc/ssh/ssh_config中添加我的开瓶器代理设置。

我仍然是Linux新手,所以我可能错了,但我会假设发生这种情况,因为我必须做sudo git clone。也许这会迫使终端使用全局设置而不是用户设置。

我会咨询我们的IT部门以确认这一点。

在任何情况下,如果您遇到类似问题,请检查git正在使用的SSH设置,全局或用户。