无法使用ssh访问由ruby aws-sdk lib创建的ec2实例?

时间:2012-03-26 10:00:06

标签: ruby-on-rails ruby amazon-ec2 aws-sdk

我正在使用ruby aws-sdk在amazone EC2中启动实例但我在使用ssh访问创建的实例时遇到问题,这里我做了什么

ec2 = AWS::EC2.new( :access_key_id => ACCESS_KEY_ID, :secret_access_key => SECRET_ACCESS_KEY, :ec2_endpoint =>  "ec2.sa-east-1.amazonaws.com")
securitygrp = ec2.security_groups.create('mysecgrp')
securitygrp.authorize_ingress(:tcp, 22)
ec2.instances.create(:image_id => "ami-082df215")

但我无法使用ssh root @ ip_address访问该实例,我得到了connection timed out,我有什么遗漏,请有人帮助我吗?

1 个答案:

答案 0 :(得分:1)

启动实例时,您可以选择提供安全组。如果省略:security_groups选项,则它将默认为“默认”安全组(启动后无法更改实例的安全组)。在您的示例中,您应该将安全组指定为刚刚创建的安全组。

要考虑的另一件事是指定密钥对。如果你没有设置它,它将默认为1,但你可能需要这个登录公共ami。

这是我刚刚运行的一个例子。我使用的AMI是amazon linux ami。

AWS.config(:access_key_id => '...', :secret_access_key => '...')
ec2 = AWS::EC2.new(:ec2_endpoint => "ec2.sa-east-1.amazonaws.com")

# create a security group and authorize ssh
sg = ec2.security_groups.create('my-security-group')
sg.authorize_ingress(:tcp, 22)

# create a key pair and write it to disk
key_pair = ec2.key_pairs.create('my-key-pair')
File.open("#{ENV['HOME']}/.ssh/my-key-pair.pk", 'w') do |file|
  file.write key_pair.private_key
end
require 'fileutils'
FileUtils.chmod(0600, "#{ENV['HOME']}/.ssh/my-key-pair.pk")

instance = ec2.instances.create(
  :image_id => 'ami-3c3be421', 
  :key_name => key_pair.name,
  :security_groups => [sg])

sleep 1 while instance.status == :pending

puts instance.ip_address
#=> '1.2.3.4'

现在你应该能够ssh到实例中(有时从实例状态为:可用时以及响应ssh时有~30秒的延迟)。

# some amis require you to login as root, others as ec2-user
$ ssh -i ~/.ssh/my-key-pair.pk ec2-user@1.2.3.4