2011-09-07 50 views
3

我一直在尝试一段时间,现在在AWS上使用雾库来配置一个小实例。我已经有些成功了(在我运行这段代码的时候,一个实例会后台运行),但是在SSH部分期间我一直收到超时错误,并且当我深入挖掘时,我发现它们始终存在“AuthentitcationFailed”问题。引导AWS服务器时发生Ruby Fog的超时问题

的故障代码如下:

require 'rubygems' 
require "fog" 

connection = Fog::Compute.new({ 
    provider:    "AWS", 
    aws_secret_access_key: SECRET_KEY, 
    aws_access_key_id:  ACCESS_KEY 
}) 

server = connection.servers.bootstrap({ 
    private_key_path: "~/.ssh/id_rsa", 
    public_key_path: "~/.ssh/id_rsa.pub", 
    username: "ubuntu" 
}) 

大量的阅读告诉我,有时候这仅仅是因为实例时间过长阀芯,但是这是非常一致的(它发生每次我试图它)。有没有人看到我在做什么错了?

回答

0

我推荐的几件事情来诊断问题(如果你仍然有它)

  1. 检查您的安全小组,以确保端口22是开放给你的IP /世界(0.0。 0.0/0)
  2. 尝试手动连接使用SSH

如果仍然看到问题,请尝试

ssh -v -v <normal options> 

这将为您提供更多关于尝试连接实例时发生的情况的信息。

+0

看来,这需要端口22,并且您无法将端口设置为其他任何设置,例如10022.这是真的吗? – bitfish

+0

只需添加'-p 10022'连接到不同的端口 –

4

前几天我有同样的问题,实际上发现我的案件the problemsubmitted it to the Fog issue tracker

我的一位同事使用connection.bootstrap()具有相同的AWS凭证,但具有不同的SSH密钥。所以“fog_default”公钥已经被注册,并且用我的密钥对登录失败。

如果遇到类似问题,请在connection.key_pairs.get('fog_default')中检查,如果之前注册了fog_default。

如果这种情况真的是这样的话,你有三种选择来解决这个问题:

  • 运行删除fog_default:connection.key_pairs.get(“fog_default”)破坏和注册新的公众。通过引导()键
  • 手动注册下一个自定义名称
  • 设置Fog.credential到自定义名称,以便引导()您的自定义键使用此名称,而不是“默认”来注册你的公钥

解决方案二看起来像这样:

Fog.credentials = Fog.credentials.merge({ 
    :private_key_path => "./keys/my_custom_key", 
    :public_key_path => "./keys/my_custom_key.pub" 
}) 

if connection.key_pairs.get('my_custom_key').nil? 
    public_key = IO.read('./keys/my_custom_key.pub') 
    connection.import_key_pair('my_custom_key', public_key) 
end 

server = connection.servers.bootstrap(
    :key_name => 'my_custom_key', 
    ... 
) 

解决方法三,我喜欢,因为我需要做的唯一的变化是设置Fog.credential,看起来是这样的:

Fog.credential = :my_custom_key 

connection.servers.bootstrap(
    :private_key_path => './keys/my_custom_key', 
    :public_key_path => './keys/my_custom_key.pub', 
    ... 
)