出于测试目的,我正在自动创建配置的EC2机器。创建/配置通过ssh连接完成(各种操作系统的逻辑相同)。在Windows(Windows 2003 Server)上,有预先配置了ssh的cygwin,因此我可以在那里使用。
作为配置的一部分,我需要安装给定版本的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也受到欢迎。谢谢。
答案 0 :(得分:0)
事实证明,在Windows(某些版本)中存在一些有意的架构分离,即服务无法访问UI。
由于cygwin ssh-daemon作为服务运行,因此无法进行UI调用或启动基于UI的程序。 JDK安装程序是基于UI的(它似乎在静默模式下执行UI-ish),这是禁止的。
从远程桌面会话运行时,一切正常,因为可以访问UI。