引导AWS服务器时Ruby Fog出现超时问题
我已经尝试了一段时间,现在提供了一个关于AWS和fog库的小实例。我已经取得了一些成功(在我运行这段代码时,一个实例确实出现了故障),但在SSH部分我不断收到超时错误,当我深入研究时,我发现它们始终是“AuthentitActionFailed”问题 失败代码如下所示:引导AWS服务器时Ruby Fog出现超时问题,ruby,amazon-ec2,amazon-web-services,fog,Ruby,Amazon Ec2,Amazon Web Services,Fog,我已经尝试了一段时间,现在提供了一个关于AWS和fog库的小实例。我已经取得了一些成功(在我运行这段代码时,一个实例确实出现了故障),但在SSH部分我不断收到超时错误,当我深入研究时,我发现它们始终是“AuthentitActionFailed”问题 失败代码如下所示: require 'rubygems' require "fog" connection = Fog::Compute.new({ provider: "AWS", aws_secret_acc
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"
})
大量阅读告诉我,有时这只是因为实例需要花费太长的时间才能启动,但这是非常一致的(每次我尝试它时都会发生)。有人知道我做错了什么吗 我推荐一些方法来诊断这个问题(如果你仍然有问题的话)
ssh -v -v <normal options>
ssh-v-v
这将为您提供有关尝试连接到实例时发生的情况的更多信息。几天前我遇到了相同的问题,并且实际发现了我的案例和问题 我的一位同事使用connection.bootstrap()时使用的AWS凭据相同,但SSH密钥不同。因此,“fog_default”公钥已经注册,尝试使用我的密钥对登录失败 如果您遇到类似问题,请使用connection.key\u pairs.get('fog\u default')检查是否以前注册过fog\u default 如果情况确实如此,您有三种选择来解决此问题:
- 通过运行:connection.key\u pairs.get('fog\u default')删除fog\u default。通过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 = :my_custom_key
connection.servers.bootstrap(
:private_key_path => './keys/my_custom_key',
:public_key_path => './keys/my_custom_key.pub',
...
)
解决方案三,我更喜欢,因为我需要做的唯一更改是设置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 = :my_custom_key
connection.servers.bootstrap(
:private_key_path => './keys/my_custom_key',
:public_key_path => './keys/my_custom_key.pub',
...
)
这似乎需要端口22,您无法将端口设置为其他任何端口,例如10022。这是真的吗?只需添加
-p 10022
即可连接到其他端口