问题:在使用亚马逊安全组和使用Chef配置时,如何在非标准端口上允许入站SSH流量?
Amazon EC2:通过将此规则添加到安全组,允许端口999上的入站ssh流量而不是22。
Custom TCP Rule Port Range: 999
Chef:通过以下方式创建一个可以在非标准端口上访问ssh的新服务器:
knife ec2 server create .... -p 999 ....
Ubuntu:通过编辑/ etc / ssh / sshd_config允许在非标准端口上进行ssh访问
Port 999
够简单?为什么不起作用?
使用knife ec2 server create ... -p 999 ...
时,实例会创建。然而它依旧于“等待sshd ......”。最终出错了。使用ssh -p 999 username@ip-address
或ssh -p 22 username@ip-address
无法使用该实例。
答案 0 :(得分:1)
正如一些评论者所说,你被锁定了,因为实例正在侦听端口22,但你的安全组只允许端口999上的TCP连接。 在这种状态下无法连接到实例。
我可以看到这个问题有三种解决方案。
创建一个新的AMI,其sshd配置为侦听999。 完成后,使用自定义AMI创建EC2服务器,一切都应该有效。 有一些花哨的方法可以使用cloudinit让你稍后自定义端口,但这似乎不值得努力。 只需硬编码" 999"而不是" 22"进入/ etc / ssh / sshd_config
明显的缺点是,对于您想要使用的任何新AMI,您必须烘焙使用所需端口而不是22的新基础AMI。 此外,这与基于图像的分层配置的Cheffy理念背道而驰。
每次启动新服务器时,您都可以通过修改安全组来解决这个问题。 只需添加一个例外,允许您的机器在引导过程期间通过SSH进入框中,然后在完成后将其从您正在使用的安全组中删除。
这里的缺点是EC2中的安全组不是动态的,因此您必须为每台计算机创建一个新的安全组(ick!),或者在此期间为您的所有服务器上的工作站打开端口22。引导窗口(也是ick!)。
我能想到的最后一个选项是在您的实时服务器之间允许端口22上的连接。
然后,您可以通过连接到另一台服务器来隧道连接,打开SSH隧道(即ssh -L ...
),并通过隧道执行刀具ec2操作。
或者,您可以在前往目标的途中手动通过其中一个其他服务器,而不是使用刀来引导新节点。
这方面的缺点是你需要信任你的服务器'安全性,因为您必须执行一些代理转发或其他恶作剧才能成功连接到新节点。
这可能是我选择的解决方案,因为它不需要新的AMI,不会向外界打开端口22,并且需要最少的努力让新团队成员学习如何做