0

出于测试目的,我正在自动创建已配置的 EC2 机器。创建/配置是通过 ssh 连接完成的(各种操作系统的逻辑相同)。在 Windows(Windows 2003 Server)上,有预配置了 ssh 的 cygwin,所以我可以在那里 ssh。

作为配置的一部分,我需要安装给定版本的 Java SDK。我将 exe 安装程序 (jdk-6u34-windows-i586.exe) 上传到机器并使用 /s 参数运行它(静默安装)。当我从 Windows 控制台(在远程桌面中)甚至通过远程桌面中的 cygwin 运行它时,它可以完美运行。但是当我 ssh 到那里并通过 ssh 在 cygwin 中运行它时,如果失败。

失败似乎很奇怪,因为安装程序将其内容部分提取到c:\Documents and Settings\Administrator\Application Data\Sun\Java\jdk1.6.0_34其中,然后失败并退出代码 67。退出前提取的文件数量不同。

当使用 Java 和 以编程方式执行此操作时Jsch,该命令还将错误消息打印initgroups: Permission denied到错误流。当我通过 ssh 手动连接时,我没有看到这条消息,所以我不确定它是否相关(谷歌搜索时,我发现这个错误发生在完全不同的上下文中,这对我没有帮助)。

我欢迎任何解释,为什么会发生这种情况(以及如何修复/解决它)。也欢迎其他提示如何在 EC2 windows 机器上可靠地自动安装给定的 JDK。谢谢。

4

1 回答 1

0

事实证明,Windows 中存在一些有意的架构分离(来自某些版本),即服务无法访问 UI。

由于 cygwin ssh-daemon 作为服务运行,它无法进行 UI 调用或启动基于 UI 的程序。JDK 安装程序是基于 UI 的(即使在静默模式下它似乎也做了一些 UI 式的操作),这被禁止了。

从远程桌面会话运行相同的程序时,一切正常,因为那里的 UI 是可访问的。

于 2015-09-22T12:33:07.337 回答