运行后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