亚马逊EC2 + Capistrano + Git:权限被拒绝(publickey)

时间:2013-05-03 15:03:38

标签: ruby-on-rails git amazon-ec2 key capistrano

当我使用Capistrano将Rails应用程序部署到Amazon EC2服务器时,我得到了

** [IP.compute-1.amazonaws.com :: out] Permission denied (publickey).
** [IP.compute-1.amazonaws.com :: out] fatal: The remote end hung up unexpectedly
执行

git clone

命令。

我认为它与Github密钥有关,但我不知道如何设置它。 我很感激每一个建议!

谢谢!

修改

我在Github上生成了新密钥,将其放入 id_rsa.pub ,在我的EC2服务器上,我使用此密钥创建了文件 .ssh / authorized_keys ,但它仍然不起作用。

这有什么问题?

2 个答案:

答案 0 :(得分:6)

使用ssh代理:

ssh_options[:forward_agent] = true

使用您的pem文件:

ssh_options[:auth_methods] = ["publickey"]
ssh_options[:keys] = ["/path/to/file.pem"]

在本地启用座席

$ ssh-add

每次都必须执行此命令,我不知道“每次”的范围,每次在echo ssh-add >> ~/.bashrc终端中打开新选项卡时,我都会添加ssh-add,具体取决于在您的操作系统和配置中。

据我所知,这个过程是:

  1. 您当地有一个ssh-agent
  2. 您使用pem文件连接到要部署的服务器,就像使用ssh一样,但这次是通过Capistrano
  3. 远程服务器使用您的代理使用您的密钥来检查部署机器内的git repo。

答案 1 :(得分:1)

首先可以通过SSH连接到您的EC2实例,然后使用EC2实例上安装的ssh密钥从EC2实例克隆您的github存储库吗?

对于所有这些分布式工作流程,事情会让人感到困惑,所以让我试着弄清楚你做错了什么。

您在Github上安装的id_rsa.pub与私钥对应。通常,这是在~/.ssh/id_rsa这个密钥对允许私钥的持有者SSH到github。

.ssh/authorized_keys是SSH服务器配置。 authorized_keys包含公钥(即id_rsa.pub),以使SSH服务器能够接受来自具有相应私钥的计算机的传入连接。 authorized_keys文件与您的克隆问题无关。

EC2实例正在尝试联系Github存储库,以便从Github克隆存储库,并且失败。 EC2实例需要配置一个私钥,以匹配该帐户的相应公共(Github)密钥。

在EC2实例上生成一个新密钥对,并将新密钥对中的公钥添加到您的Github帐户。