无法通过 SSH 连接到由 vagrant 启动的 ec2 ubuntu 实例

无法通过 SSH 连接到由 vagrant 启动的 ec2 ubuntu 实例

运行后vagrant up --provider=aws,我可以看到一个 ec2 实例被创建并启动并运行。然而它总是会卡在这一点上

==> default: Waiting for SSH to become available...

我必须按 ctrl-c 键执行该作业,这会导致所述 ec2 实例终止。

部分输出是

==> default:  -- Assigning a public IP address in a VPC: false 

这可能是一个原因吗?

我已经仔细检查并确保我的 IP 可以连接到 VPC。

设置调试标志时,以下是更详细的日志输出:

DEBUG ssh: Checking key permissions: /Users/antkong/.vagrant.d/insecure_private_key
 INFO ssh: Attempting SSH connection...
 INFO ssh: Attempting to connect to SSH...
 INFO ssh:   - Host: 54.186.111.213
 INFO ssh:   - Port: 22
 INFO ssh:   - Username: ubuntu
 INFO ssh:   - Password? false
 INFO ssh:   - Key Path: ["/Users/antkong/.vagrant.d/insecure_private_key"]
DEBUG ssh: == Net-SSH connection debug-level log START ==
DEBUG ssh: D, [2014-10-12T21:11:13.959627 #15559] DEBUG -- net.ssh.transport.session[80905170]: establishing connection to 54.186.111.213:22

DEBUG ssh: == Net-SSH connection debug-level log END ==
 INFO retryable: Retryable exception raised: #<Errno::ECONNREFUSED: Connection refused - connect(2)>
 INFO ssh: Attempting to connect to SSH...
 INFO ssh:   - Host: 54.186.111.213
 INFO ssh:   - Port: 22
 INFO ssh:   - Username: ubuntu
 INFO ssh:   - Password? false
 INFO ssh:   - Key Path: ["/Users/antkong/.vagrant.d/insecure_private_key"]
DEBUG ssh: == Net-SSH connection debug-level log START ==
DEBUG ssh: D, [2014-10-12T21:11:21.379386 #15559] DEBUG -- net.ssh.transport.session[81c9ff78]: establishing connection to 54.186.111.213:22

以下是 Vagrant 文件的部分列表:

  config.vm.provider :aws do |aws, override|
    # Change these values
    aws.access_key_id = "XXXX"
    aws.secret_access_key = "XXXX"
    aws.keypair_name = "ubuntu-my-app"
    aws.security_groups = ["my-app"]

    # Specify parameters required for an EC2 instance
    aws.instance_type = "t2.micro"

    # aws.associate_public_ip = true
    # aws.elastic_ip = true

    # Tags
    aws.tags = {
      'Name' => 'vtest',
    }

    # Defalut to US West (Northern California)
    aws.region = "us-west-2"
    aws.ami = "ami-33db9803"

    # Use a dummy box for the AWS provider
    override.vm.box = "dummy"
    override.ssh.username = "ubuntu" # is it a problem?

    # Change this value to the path of your private key
    # Did not work; comment out for now 
    # override.ssh.private_key_path = "./anthony_aws.id_rsa"
  end

上述安装/配置文件有什么问题?

答案1

请检查以下内容:

  • 您的私钥应具有最低读取权限:0600。
  • 您的公钥应包含在authorized_keys服务器用户的文件中(~/ssh/authorized_keys
  • 您正在连接的 IP 地址不应已存在于./ssh/known_hosts本地系统上的其他主机
  • 您的 EC2 实例应位于允许 TCP 22 的安全组中0.0.0.0/0,或您连接的地址,例如

    aws.security_groups = [ 'vagrant' ]
    
  • 如果您的 EC2 实例位于 VPC 中,则该实例应位于具有 Internet 网关和流经该 Internet 网关的默认路由的子网中(如果您在 Amazon EC2 中使用默认 VPC,则情况应该如此)。

答案2

问题是您无法通过 EC2 实例上的 ssh 进行身份验证。如文档您需要提供私钥的路径,该路径与您的 EC2 帐户已知的公钥相匹配。确保您已正确设置你的 EC2 密钥对

答案3

如果您通过 VPN 连接,并且所有流量(包括 DNS)都转发到 VPN 网关,那么您将无法通过公共 IP(Vagrant 尝试)进行连接,但您可以使用终端中的 DNS 名称进行连接。

如果您从互联网查询 DNS,AWS 会将 DNS 名称解析为公共 IP,但解析为内部的如果您从 VPC 查询,则为 IP(172.xxx)。

如果您使用非 AWS DNS 服务器作为解析器,它将始终解析为公共 IP,并且您将陷入困境,除非分配给实例的安全组允许从外部世界访问端口 22。

Vagrant 总是尝试连接到公共 IP 而不是 DNS 名称。

我在这里打开了一个关于此问题的问题:https://github.com/mitchellh/vagrant-aws/issues/396

答案4

登录到亚马逊网络服务并检查以下内容:

  • 安全组例如允许入站SSH 访问(查看:查看规则)。
  • 对于 VPC 实例,检查其附件路由表应该有0.0.0.0/0目的地和你的互联网网关作为目标。
  • 仔细检查你的路线信息系统日志联网实例的。

欲了解更多详情,请查看:排除实例连接故障

相关内容