我一直在研究一个问题,希望有经验的人能帮我解决。我最近开始学习 Windows .bat 文件,并且一直在考虑跨操作系统使用的实际应用程序。
设置如下:
有一个配置为全时运行特定程序的 Linux 核心服务器,但该程序偶尔会“出错”(不产生错误的情况下影响用户),而修复此问题的最佳方法是重新启动服务器。酒店不希望服务器在非必要情况下停机,因此不允许按计划重新启动。此外,由于服务器是专门为此程序配置的,因此无法安装任何其他应用程序或服务,否则会导致服务器出现其他问题。
服务器需要管理员凭据才能登录,但所有用户都使用 Windows 10 Pro 计算机,并且不熟悉 Linux,因此他们无法自行解决问题,需要联系第三方。因此,要求您创建一个 .bat 文件,该文件可以放在 Windows 计算机上,可以由工作人员运行,从而重新启动服务器,而无需用户进行任何其他输入(文件安全不是考虑因素。用户名、密码和用户输入可以包含在 .bat 文件中)。
##补充笔记:##
从我之前研究这个问题时收集到的信息来看,Windows .bat 文件似乎会启动与 Linux 服务器的 ssh 会话,然后输入用户名和密码,并发出“sudo reboot”命令。或者,似乎可以使用 ssh 在 Linux 服务器上运行可执行 .sh 文件来执行相同的操作。我在网上找到了类似的例子,但它们似乎都使用额外下载的程序或服务来完成。
你会怎么做?
编辑:到目前为止,我遇到的最大问题是当连接要求输入密码时。它似乎无法从 .bat 文件中接受密码。我目前对 .bat 文件的尝试如下:
ssh -t [user]@[ip_address]
SLEEP 10
@echo [password]
@echo sudo reboot
答案1
该部分In addition, because the server is configured specifically for this program, no additional applications or services could be installed without causing additional problems on the server.
并非基于证据的操作实践的示例。
鉴于此,并跟进@Tero Kilkanen 的回答:将有某种方式来识别服务已停止执行其应执行的操作。在服务器上本地设置监控,当发生这种情况时会向您的 Ops 团队发出警报。这是第一步。记录这些事件,以便您可以提出花钱解决潜在问题的商业案例。
其次,使用监视器来驱动服务的自动重启,或者在最坏的情况下重新启动整个服务器 - 不过,如果您真正了解出了什么问题,那么这可能就没有必要了。
如果你真的需要以错误的方式执行此操作,我建议您查阅 openssh(在客户端上)和 sudoers(在服务器上)文档(如果我们谈论的是安装了 openssh 客户端的现代 Windows 10 版本)。您需要在服务器上创建一个具有无密码 sudo 权限的受限访问帐户仅有的执行/usr/sbin/reboot
命令(路径可能因发行版而异)。您可以通过使身份验证基于密钥(-i filename
在客户端上)来简化身份验证,并且可以将要运行的命令(特别是重新启动命令)直接作为 ssh 客户端的参数包含进去。
答案2
我担心这是解决这个问题的笨拙方法。
解决该问题的最佳方法是修复该应用程序,以使其不会变得无响应。
如果不可能的话,那么您应该设置 Linux 系统,以便在服务无响应时自动重新启动服务。
下一个最佳选择是设置当某些服务无法启动时自动重启服务器。如果你不知道哪些服务崩溃了,就需要这样做。
最后一个选项就是您所计划的:在服务中断时强制最终用户做出反应。
在执行您的计划之前,请考虑其他选择。