我有一个基于Linux的Amazon AMI,它包含一个Git存储库。我希望git clone
该存储库到我的本地OSX机器(也安装了Git)。
存储库位于/home/ec2-user/my_test_repo
的Amazon框中。 my_test_repo
目录的内部是.git
目录。
在我的OSX机器上,我可以成功SSH到托管repo的机器ec2-user
,我可以执行大量的bash命令。所以,我知道SSH有效。但是,当我从OSX机器执行以下命令时,以下命令不起作用:
git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo.git
我收到以下错误消息:
Cloning into 'my_test_repo'...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我在这里做错了什么想法?
答案 0 :(得分:6)
第一个问题是您无法登录服务器:
Cloning into 'my_test_repo'... Permission denied (publickey,gssapi-keyex,gssapi-with-mic). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
您需要首先使用此命令:
ssh ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com
这个问题与Git无关,你需要让ssh
使用公钥认证。
第二个问题是存储库的路径可能是错误的。如果服务器上的存储库位于 .git
内的/home/ec2-user/my_test_repo
目录中,则URL将为:
git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo/.git
注意结束部分是my_test_repo/.git
,因为它应该对应于包含Git存储库的目录的文件系统路径。 Git存储库包含HEAD
,config
等文件以及objects
,refs
,hooks
等目录。
因此,看起来my_test_repo
是所谓的工作树。如果从my_test_repo/.git
克隆,则无法推送到它,因为git不允许使用工作树推送到存储库。它只允许推送到所谓的裸存储库,而不需要工作树。您可以使用以下命令从现有的非裸存储库创建裸存储库:
git clone --bare my_test_repo my_test_repo.git
执行此操作后,您的原始网址应该有效,因为现在Git存储库的路径实际上是my_test_repo.git
,而不是my_test_repo/.git
。您不再需要my_test_repo
工作树,您可以将其删除。
最后,您可以像这样简化存储库URL:
git clone ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com:my_test_repo.git
答案 1 :(得分:2)
我终于得到了这个,在@janos 的帮助下(见上面的评论)。
首先,您需要让ssh使用公钥认证。这与Git无关。
在终端中,在OSX客户端计算机上,我输入了以下命令:ssh-keygen -t dsa
,它在我的本地OSX计算机上生成SSH密钥。对于每个提示,您可以输入实际值,或者只需按ENTER键(输入值可以让您自定义并使SSH过程更安全)。我只是按了ENTER。
接下来,我将新生成的〜/ .ssh / id_rsa.pub 文件(使100%确定它是末尾为.pub的文件)复制到远程Amazon EC2服务器。但是,我发现这个过程与大多数在线教程的解释略有不同(我认为是因为EC2实例的.pem文件有点独特的使用)。
在OSX机器的终端上,我cd
进入包含我的.pem文件的目录,然后输入以下命令:scp -i JPo.pem ~/.ssh/id_rsa.pub ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com:.ssh/authorized_keys
此时,具有公钥认证的ssh现在应该在客户端OSX计算机和远程Amazon EC2实例之间工作。
现在是Git的东西,这是非常基本的。我输入了以下命令:git clone ssh://ec2-user@ec2-54-81-229-189.compute-1.amazonaws.com/home/ec2-user/my_test_repo/.git
完成了。它奏效了!