2017-07-04 62 views
2

我正在写一个UPS监视控制台应用程序,当UPS电池在停电期间达到预定义的充电量时会自动关闭服务器。如何关闭容器内的主机?

如果可能的话,我想在一个容器中运行它,因为NUT(网络UPS工具)很难在Windows系统上工作。我已经配置过一次裸机,并且我不希望再次忍受这种痛苦,或者更糟,还有三分之一。 (但这是另一天的另一个讨论。)

回到今天:我如何发送一个系统关闭命令到容器的主机?我试过简单的shutdown /s /t 0,但是关闭了容器。我需要联系主机。

- 注TO CLOSE VOTERS--

这个问题是不是题外话。举例来说,注释this Q&A,其当前承载的数量超过2,000。问题中没有提到单一的编程概念。

Docker是开发人员使用的工具。所以它的主题与这个论坛非常相关。对docker标签运行快速查询,您会看到我的意思。

+0

@已收集 - 查看我的编辑。 – InteXX

+0

我看了你的理由,为什么这个问题很适合SO。所以我的下一个建议是:写一个密码保护和TLS安全的HTML监听器,当从容器调用时运行shutdown命令。 – Marged

+0

@已收集 - 我的想法确切。你想让它成为答案,我可以接受它吗? – InteXX

回答

0

一种涉及一点点编程的方法是创建一个位于主机上等待传入连接的小型服务。

该服务可以执行shutdown命令或调用相应的Windows API调用。

我建议使用单个URL为此服务提供一个最小的http端点,并使用用户/密码和SSL/TLS来保护它。

你可以这样使用curl --user user:pass https://host/shutdown

应该很容易golang和NSSM实现这个容器调用它。

0

psshutdown \\host -u ... -p ...应该做的伎俩,假设你能够/愿意在容器中存储具有足够权限的凭证。

有关更多详细信息和下载链接,请参见https://technet.microsoft.com/en-us/sysinternals/psshutdown.aspx

编辑:我在这里留下来记录一种由于Windows处理安全性的方式而不起作用的方法。按照下面提供的InteXXs链接,它清楚地描述了psshutdown再次运行以及这会带来哪些安全风险。

+1

感谢您的试用......事实证明,当从非域帐户连接(即使使用域凭证)时,“PsTools”实用程序要求在远程计算机上关闭UAC。请参阅[这里](http://www.harmj0y.net/blog/redteaming/pass-the-hash-is-dead-long-live-localaccounttokenfilterpolicy/)了解更多信息。 – InteXX

+0

有趣的知道。我的下一个方法是安装SSH并以这种方式发送关机,但这有点不相同 – Marged