3

一段时间以来,我一直在尝试使用雾库在 AWS 上配置一个小型实例。我已经取得了一定的成功(因为当我运行此代码时,一个实例确实启动了),但是在 SSH 部分我不断收到超时错误,当我深入挖掘时,我发现它们始终是“AuthentitcationFailed”问题。

失败的代码如下:

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"
})

许多阅读告诉我,有时这只是因为实例需要很长时间才能启动,但这是非常一致的(每次我尝试它都会发生)。有谁看到我做错了什么?

4

2 回答 2

4

几天前我遇到了同样的问题,实际上为我的案例找到了问题并将其提交给了 Fog 问题跟踪器

我的一位同事正在使用具有相同 AWS 凭证但不同 SSH 密钥的 connection.bootstrap()。因此,“fog_default”公钥已经注册,尝试使用我的密钥对登录失败。

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

如果情况确实如此,您可以通过三个选项来解决此问题:

  • 通过运行删除fog_default: connection.key_pairs.get('fog_default').destroy 并通过 bootstrap() 注册您的新公钥
  • 以自定义名称手动注册您的自定义密钥
  • 将 Fog.credential 设置为自定义名称,以便 bootstrap() 使用此名称而不是“默认”来注册您的公钥

解决方案二如下所示:

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',
  ...
)
于 2011-12-02T13:30:43.063 回答
0

我会推荐一些东西来诊断问题(如果你仍然有它)

  1. 检查您的安全组以确保端口 22 对您的 IP / 世界 (0.0.0.0/0) 开放
  2. 尝试使用 SSH 手动连接

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

ssh -v -v <normal options>

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

于 2011-11-24T04:25:51.610 回答