使用Chef&亚马逊与非标准的ssh端口

时间:2014-08-22 17:39:49

标签: linux amazon-web-services ssh amazon-ec2 chef

问题:在使用亚马逊安全组和使用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-addressssh -p 22 username@ip-address无法使用该实例。

1 个答案:

答案 0 :(得分:1)

正如一些评论者所说,你被锁定了,因为实例正在侦听端口22,但你的安全组只允许端口999上的TCP连接。 在这种状态下无法连接到实例。

我可以看到这个问题有三种解决方案。

解决方案1:制作新的AMI

创建一个新的AMI,其sshd配置为侦听999。 完成后,使用自定义AMI创建EC2服务器,一切都应该有效。 有一些花哨的方法可以使用cloudinit让你稍后自定义端口,但这似乎不值得努力。 只需硬编码" 999"而不是" 22"进入/ etc / ssh / sshd_config

明显的缺点是,对于您想要使用的任何新AMI,您必须烘焙使用所需端口而不是22的新基础AMI。 此外,这与基于图像的分层配置的Cheffy理念背道而驰。

解决方案2:Icky Icky安全组

每次启动新服务器时,您都可以通过修改安全组来解决这个问题。 只需添加一个例外,允许您的机器在引导过程期间通过SSH进入框中,然后在完成后将其从您正在使用的安全组中删除。

这里的缺点是EC2中的安全组不是动态的,因此您必须为每台计算机创建一个新的安全组(ick!),或者在此期间为您的所有服务器上的工作站打开端口22。引导窗口(也是ick!)。

解决方案3:隧道

我能想到的最后一个选项是在您的实时服务器之间允许端口22上的连接。 然后,您可以通过连接到另一台服务器来隧道连接,打开SSH隧道(即ssh -L ...),并通过隧道执行刀具ec2操作。

或者,您可以在前往目标的途中手动通过其中一个其他服务器,而不是使用刀来引导新节点。

这方面的缺点是你需要信任你的服务器'安全性,因为您必须执行一些代理转发或其他恶作剧才能成功连接到新节点。

这可能是我选择的解决方案,因为它不需要新的AMI,不会向外界打开端口22,并且需要最少的努力让新团队成员学习如何做