【发布时间】:2012-09-04 10:33:09
【问题描述】:
出于测试目的,我正在自动创建已配置的 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。谢谢。
【问题讨论】:
-
您是否尝试过不使用
/s(静音模式)参数?它可能会为您提供更多信息来调试问题。 -
使用 SSH 作为“跨平台”解决方案对我来说似乎有点奇怪。我建议尝试使用 Ant 或其他一些(例如 python)脚本工具,它们是跨平台的。 Cygwin 充其量是不稳定的,甚至表示它不能充分替代 unix 机器上的 shell 终端。像对待一个人一样对待它可能会带来更多的麻烦。
-
好点。在没有'/s'的情况下运行时,结果是一样的。我们不使用 ssh/cygwin 来编写真正的脚本。这只是一种方式,如何在目标机器上执行一些简单的任务——复制文件、执行某些东西等。如果我们使用 and 或 python,我们无论如何都必须以某种方式启动它们。