我知道如何在 Windows 主机启动时自动打开控制台会话(推荐的方法是使用加密密码:https ://docs.microsoft.com/en-us/sysinternals/downloads/autologon )。
当服务器运行需要运行 GUI 的编写不当的程序时,这很有用,而它应该作为服务运行,或者至少在后台运行。
会话打开后,可以锁定屏幕并且程序继续工作。管理员甚至可以使用另一个会话进行 RDP(这也锁定了控制台会话)。到目前为止,我没有看到任何例外。
这种方法会导致几个问题。一些最大的:
- 一个会话在控制台上是敞开的。服务器前面的任何人都可以完全访问此会话,否则任何击中未受监控的键盘/鼠标的东西都可能导致灾难。我们可以通过短暂的屏幕超时来缓解这种情况
- 以这种方式只能打开一个会话。因此,当我们需要它用于 2 个不同的非同居项目时,我们就完蛋了
我想在服务器启动时自动打开几个非控制台会话。好像打开了几个远程桌面会话然后断开连接。然后,被指控的程序可以在单独的会话中使用 GUI 运行。
--> 知道如何实现吗?
mstsc.exe
可以在没有 GUI 的情况下运行,这通常是无用的,但在这种情况下非常有用。您可以创建在计算机启动时触发的计划任务。
此任务将启动尽可能多的远程桌面会话,然后终止它们,使会话保持活动状态并断开连接。
我个人使用计划任务调用的批处理(.cmd):
我有一个更复杂的方法来杀死 mstsc.exe 这是特定于我的需要,所以我只是为示例放置了一个基本的 taskkill。
要准确实现您的要求,您至少需要一个带有 GUI 的 Linux 或 Windows Server 来放置脚本。
在 linux/bash 中,我编写了一个ping 监视脚本,该脚本在可能是服务器重启后运行命令(ping 一段时间)。该命令将是一个脚本,在后台运行两次 rdp 客户端,具有预先接受的证书和有效的存储凭据(每个连接一个)到您问题的服务器对象。然后我会用一个结束脚本
(因为杀死 rdp 客户端不会终止远程会话,这是您想要实现的一部分)。
如果您可能想使用 Windows 作为客户端,我相信您可以轻松地在Windows 批处理而不是 bash 中执行此操作。只是我不确定您是否可以建立从同一个 Windows 客户端到同一个 Windows 服务器的多个连接。我认为,至少您必须使用两个不同的用户运行脚本两次。如果不能,则必须将此类脚本放在两台不同的 Windows 客户端机器上。
如果您选择使用 Windows 客户端,则由 ping 监控脚本激活的第二个脚本调用的二进制文件将是 mstsc.exe,并且将具有 rdp-for-your-server-saved-session.rdp 的完整路径,包含预先接受的证书和有效凭据。
在 Windows 客户端上,您可以使用 srv2any 来运行 mstsc,而脚本只会启动和停止这两个服务。在 win 上,您将使用任务调度程序,在 Linux 中,crontab。
为了让它按您的意愿工作,您必须在 Windows 服务器上禁用自动登录。然后,您可以在此之后实现延迟的本地登录。
这个解决方案当然有一定比例的故障,其中 ping 监控脚本观察到的停机时间不是由于服务器重新启动造成的。但是在这种情况下,两个自动不需要的登录不会造成太大的伤害。
您必须努力工作和测试才能实现这一目标。这就是为什么以下...... 在建立这样的安排之前,我会尝试任何其他可能的事情!
无论如何,正如我在对您的问题的评论中所建议的那样,我会尝试通过服务器上的 srv2any 启动编码错误的程序。你没有在你的问题中提到这个尝试。你试过了吗?