2017-07-04 63 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