使用knife ec2插件在VPC私有子网中创建VM

Posted

技术标签:

【中文标题】使用knife ec2插件在VPC私有子网中创建VM【英文标题】:Using knife ec2 plugin to create VM in VPC private subnet 【发布时间】:2013-05-03 08:06:34 【问题描述】:

虽然我写过不少厨师,但我对 AWS/VPC 和管理网络流量(尤其是堡垒主机)还是很陌生。

使用刀 ec2 插件,我希望能够从我的开发人员工作站动态创建和引导 VM。 VM 应该能够存在于我的 VPC 的公共子网或私有子网中。我想在不使用弹性 IP 的情况下完成所有这些工作。我还希望我的堡垒主机不插手(即,我希望避免在我的堡垒主机上创建显式的每 VM 监听隧道)

我已成功使用 Knife ec2 插件在旧版 EC2 模型中创建了一个 VM(例如,在我的 VPC 之外)。我现在正在尝试在我的 VPC 中创建一个实例。在刀命令行上,我指定了网关、安全组、子网等。虚拟机被创建,但刀随后无法通过 ssh 连接到它。

这是我的刀命令行:

knife ec2 server create \
    --flavor t1.micro \
    --identity-file <ssh_private_key> \
    --image ami-3fec7956 \
    --security-group-ids sg-9721e1f8 \
    --subnet subnet-e4764d88 \
    --ssh-user ubuntu \
    --server-connect-attribute private_ip_address \
    --ssh-port 22 \
    --ssh-gateway <gateway_public_dns_hostname (route 53)> \
    --tags isVPC=true,os=ubuntu-12.04,subnet_type=public-build-1c \
    --node-name <VM_NAME>

我怀疑我的问题与堡垒主机的配置有关。经过一天的谷歌搜索,我无法找到有效的配置。我可以通过 ssh 连接到堡垒主机,然后可以从那里通过 ssh 连接到新创建的虚拟机。我无法让刀使用网关参数成功复制它。

我玩过 /etc/ssh/ssh_config。这是它今天的存在方式:

    ForwardAgent yes
#ForwardX11 no
#ForwardX11Trusted yes
#RhostsRSAAuthentication no
#RSAAuthentication yes
#PasswordAuthentication no
#HostbasedAuthentication yes
#GSSAPIAuthentication no
#GSSAPIDelegateCredentials no
#GSSAPIKeyExchange no
#GSSAPITrustDNS no
#BatchMode no
   CheckHostIP no
#AddressFamily any
#ConnectTimeout 0
    StrictHostKeyChecking no
    IdentityFile ~/.ssh/identity
#IdentityFile ~/.ssh/id_rsa
#IdentityFile ~/.ssh/id_dsa
#Port 22
#Protocol 2,1
#Cipher 3des
#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
#EscapeChar ~
    Tunnel yes
#TunnelDevice any:any
#PermitLocalCommand no
#VisualHostKey no
#ProxyCommand ssh -q -W %h:%p gateway.example.com
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no
    GatewayPorts yes

我还将 /home/ubuntu/.ssh/identity 设置为我的新实例的匹配私钥。

更新:

我在堡垒主机的 /var/log/auth.log 中注意到以下内容:

May  9 12:15:47 ip-10-0-224-93 sshd[8455]: Invalid user  from <WORKSTATION_IP>
May  9 12:15:47 ip-10-0-224-93 sshd[8455]: input_userauth_request: invalid user  [preauth]

【问题讨论】:

【参考方案1】:

我终于解决了这个问题。指定网关时我丢失了用户名。我最初认为 --ssh-user 参数将用于网关和我试图引导的 VM。这是不正确的,必须为两者指定用户名。

knife ec2 server create \
    --flavor t1.micro \
    --identity-file <ssh_private_key> \
    --image ami-3fec7956 \
    --security-group-ids sg-9721e1f8 \
    --subnet subnet-e4764d88 \
    --ssh-user ubuntu \
    --server-connect-attribute private_ip_address \
    --ssh-port 22 \
    --ssh-gateway ubuntu@<gateway_public_dns_hostname (route 53)> \
    --tags isVPC=true,os=ubuntu-12.04,subnet_type=public-build-1c \
    --node-name <VM_NAME>

仅包含更新的那一行(注意前面的 ubuntu@):

    --ssh-gateway ubuntu@<gateway_public_dns_hostname (route 53)>

我现在已经完成并锁定了我的堡垒主机,包括删除 /home/ubuntu/.ssh/identity,因为将私钥存储在堡垒主机上真的很烦我。

仅供参考:设置堡垒主机时,sshd 的“开箱即用”配置将在使用 Amazon Linux AMI 映像时起作用。此外,上面的一些参数是可选的,例如 --ssh-port。

【讨论】:

我遇到了类似的问题。添加 --ssh-gateway 有帮助,但我仍然没有成功连接我的公钥。我不断收到Enter the password for &lt;account&gt;。只是想知道您在解决此问题时是否也遇到过这种情况。 只是一个更新,我需要修复一些问题。首先,我没有使用正确的身份识别文件,所以 SSH 默认使用用户名/密码。另一件事是我需要打开默认情况下没有的转发(Ubuntu)。

以上是关于使用knife ec2插件在VPC私有子网中创建VM的主要内容,如果未能解决你的问题,请参考以下文章

EC2 实例的输出子网

VPC 中私有子网中 EC2 实例的 Amazon ELB

SSH到位于VPC中的私有子网中的AWS EC2实例

如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例

使用 terraform 在非默认 VPC 中创建 AWS RDS 实例

设置从公共服务器到私有服务器-EC2 的 SSH 连接?