我在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?
答案 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设置,全局或用户。