使用Amazon EC2和Git的.ssh配置

19
我在从Amazon EC2服务器克隆Git存储库时遇到了奇怪的问题。它在我的一台运行Ubuntu 12.04的计算机上没有任何问题,而在另一台使用12.10的计算机上则会出现错误:
ssh: Could not resolve hostname ec2server: Name or service not known  
fatal: The remote end hung up unexpectedly

这就好像它没有识别我的配置文件一样。我使用以下 git 命令进行克隆:
sudo git clone ec2server:/var/www/project.git

或者

sudo git clone ec2xxx.compute-1.amazonaws.com:/var/www/project.git

这两台计算机上的~./ssh目录下的两个配置文件完全相同,内容如下:
Host ec2server
   Hostname ec2XXX.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/.ssh/mykey.pem

如果我用实际地址替换ec2server,就会得到以下错误信息:
Cloning into 'project'...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

提前感谢。
2个回答

23
通常这是权限问题。你的配置文件父目录的chmod在两台计算机上可能不同。(我指的不仅仅是直接的父目录.ssh,而是所有的父目录)。
请参考"Git SSH authentication",但要知道如果任何一个父目录对组或全局可写,ssh将无法工作。
另外请注意,你的第二个命令不正确,应该是:
git clone ubuntu@ec2xxx.compute-1.amazonaws.com/var/www/project.git

没有 ':'(':' 意味着使用类似于 scp 的语法的 config 文件)。

但是,只有当您拥有~/.ssh/id_rsa~/.ssh/id_rsa.pub时才能工作。
如果您有 mykey.pem,则需要一个 config 文件让 ssh 知道您的公钥和私钥在哪里,这意味着只有这个可以工作:

git clone ec2server:/var/www/project.git

根据这个帖子这个论坛,另一个检查点是检查是否存在任何DNS/DHCP问题(有点像"在动态DNS后面使用git")。

Host ec2server
   Hostname 1xx.xxx.xxx.xxx # ip address of ec2XXX.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/.ssh/mykey.pem

但是父目录是家目录。 - Pio
@Pio 只是提醒一下,~ 是当前用户主目录的快捷方式(例如 /home/youruser/)。您能使用此密钥和用户名 SSH 进入该服务器吗?(例如从 Windows 机器上使用 Putty - Michel Feldheim
我尝试过了,但它不起作用。语法不对:因为像这样搜索名为ubuntu@ec2xxx.compute-1.amazonaws.com/var/www/project.git的存储库并且给我没有找到存储库的错误。如果我在它们之间加上:,那么我会得到我帖子中提到的权限被拒绝的错误。 - Pio
@Pio,根据https://openshift.redhat.com/community/forums/openshift/ssh-connection-closed-by的建议,使用IP地址代替亚马逊服务器名称是否更好?我已经编辑了答案来提及这种可能性。 - VonC
1
在阅读了100篇不同的文章后,使用“git clone ec2server:/var/www/project.git”解决了我的问题。谢谢。 - Marina Martin
显示剩余7条评论

6
最近我不得不重新安装存储了工作配置的系统,但我没有成功复制它,所以这与Linux版本无关(很可能)。我所做的是,我成功使用上述原始脚本将存储库克隆到我的主目录中。在这里,它正确地捕捉了名称,但如果我导航到之前的/var/www目录,它只是给了我同样的错误:找不到ec2server...。因此,我认为问题与权限+命令组合有关。如果有人能够弄清楚如何使其正常工作,我会将他的回复标记为正确答案,直到那时我将把自己的回复标记为正确答案,因为这是最接近正确答案的。

更新

我发现了问题所在:我必须更改/var/www文件夹的权限,才能将其克隆到该目录中。现在它是777(仅在本地机器上进行开发时使用)。


听起来不错,而且对你有用,所以加一。我的回答不够具体。 - VonC

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