我公司的产品基本上是一个Linux机器(Ubuntu),坐在别人的networking上运行我们的软件。 到目前为止,我们在野外只有不到25个盒子,并使用TeamViewer来pipe理它们。
我们现在将要发运1000个这样的盒子,TeamViewer不再是一个选项。 我的工作是想出一个方法来访问这些框并更新它们上的软件 。 这个解决scheme应该能够穿透防火墙,你有什么。
我考虑过:
1.本地化的解决scheme (例如Linux服务),build立到云中的服务器的SSH反向隧道 ,以及云中的另一个服务,跟踪这些服务并让您连接到它们。
这显然是劳动密集型的,坦率地说,感觉像是重新发明轮子,因为许多其他公司肯定已经遇到了这个问题。 即使如此,我也不确定我们会做得很好。
2.木偶,厨师或OpenVPN等工具
我试图尽可能地阅读,但我似乎无法通过营销渗透足够的理解明显的select。
除了我们之外,没有其他人需要连接到这些盒子。 有没有相关的经验可以给我一些指点?
随着规模的扩大, 将更新推送到所有产品将变得不可行。
相反,请让您的产品定期“更新”其更新,然后随着您的成长,您可以在服务器端添加额外容量。
正如你所build议的那样,这个问题已经解决了。 以下是我能想到的几种方法。
rsync
/ scp
所需的文件。
原始下载+签名检查 :
ansible:Ansible是pipe理系统configuration的好工具。 它是在木偶/厨师的领域,但是没有代理(使用python)并被devise为幂等的。 如果部署你的软件需要一个复杂的bash脚本,我会使用这样的工具来使执行更新变得简单。
当然,还有其他的方法可以做到这一点。但是这让我很重要。
不pipe你做什么,都必须有一个机制来确保你的更新没有被篡改。 恶意用户可以在上述任何configuration中模拟您的更新服务器。 如果你没有validation你的更新,你的盒子更容易被黑客入侵。
一个好办法是签署你的更新文件。 您必须维护一个证书(或者支付某人这样做),但是您可以在每个设备上安装指纹,然后将其发送出去,以便他们可以拒绝被篡改的更新。
当然,如果有人能够物理访问客户的部署,他们可以轻松地接pipe服务器。 但至less他们不能攻击其他部署! 物理安全可能是您客户的责任。
如果你想了一会儿,想象一下,如果你使用一个大型的OpenVPNnetworking进行更新会发生什么…然后,他们可以使用被入侵的服务器攻击VPN上的每个实例
不pipe你做什么,安全都需要从一开始就build立起来。 不要在这里偷工减料 – 如果你这样做,你会后悔的。
充分保护这个更新系统不属于这篇文章的范围,如果你或者你的团队中的某些人不熟悉这个领域,我强烈build议雇用一名顾问。 这是值得的每一分钱。
你真的需要访问它们吗?
还是只更新它们? 因为你可以让他们自己更新,类似于自己无人看pipe的更新。
如果你需要login
为什么不通过端口转发来监听OpenSSH守护进程? 每个客户可以有一个单独的安全钥匙,只有在需要时才能连接。
由您的客户决定
您还需要考虑客户愿意接受的内容。 他们可能不适合任何远程访问他们的networking,或只适应特定的技术/configuration。
我build议像木偶或盐的编排工具。
Salt是一个消息队列,可以build立从设备到主服务器的持续出站连接。 您可以使用它在设备上运行任意命令…就像apt-get
。
另一种select是Puppet,在那里你仍然有一个主服务器,客户端从他们的位置进行出站连接。
我将这两种工具用于类似的目的,我可能没有防火墙的pipe理控制权。