【问题标题】:can't access ec2 instance which is created by ruby aws-sdk lib using ssh?无法访问由 ruby​​ aws-sdk lib 使用 ssh 创建的 ec2 实例?
【发布时间】:2016-03-25 08:04:53
【问题描述】:

我正在使用 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,我是否缺少某些东西,请任何人帮助我?

【问题讨论】:

  • 问题是您在“默认”安全组中创建/运行新实例,而不是新创建的具有 ssh 入口规则的实例。

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


【解决方案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 进入实例(有时从实例状态为 :available 到响应 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 2020-08-07
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多