如何将 Ant 的sshexec
任务与配置有密码短语的私钥一起使用?
我找到了以下解决方法:
- 从私钥中删除密码(最实用(
- 将密码作为命令行选项传递,例如
-Dpass=mypass
(不安全( - 对 Ant 作业定义文件中的密码短语进行硬编码(最差(
这些对我来说都不是一个好的选择,但第一个是可以接受的。
将私钥加载到pageant
似乎根本没有帮助。从其他答案来看,Ant 似乎正在尝试访问它,但它不能,回退到密码身份验证,失败并显示:
com.jcraft.jsch.JSchException: Auth cancel
at com.jcraft.jsch.Session.connect(Session.java:490)
at com.jcraft.jsch.Session.connect(Session.java:162)
... (rest of the stack trace omitted)
另一个常见症状是,如果未安装无限强度 JCE,错误如下所示:
com.jcraft.jsch.JSchException: The cipher 'aes256-cbc' is required, but it is not available.
at com.jcraft.jsch.KeyPair.loadPPK(KeyPair.java:942)
at com.jcraft.jsch.KeyPair.load(KeyPair.java:515)
... (rest of the stack trace omitted)
回到我的问题,如何使其正常工作?使用带有密码短语的私钥,而无需在任何地方硬编码或在命令行上输入?最好使用 pageant
,我可以在其中输入密码短语并在运行 Ant 任务之前存储私钥。
如果你从命令行运行你的 ant-file,你可能会让它询问你的密码短语,而不是硬编码它。重要的部分是提示输入密码,将其存储在属性中并在密码参数中引用此属性。
<target name="copy">
<input message="Enter passphrase for keyfile:" addproperty="the.password">
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
</input>
<upload-files host="the.host" />
</target>
<macrodef name="upload-files">
<attribute name="host" />
<sequential>
<scp file="${the.file}"
todir="@{host}:directoryname/${filename}"
keyfile="${key.file}" passphrase="${the.password}" verbose="true"/>
</sequential>
</macrodef>
要求:
- 蚂蚁 1.7.1 Java
- 6,如果它在Java 5上运行,它将回退到"正常"
- 从命令行运行 ant-file(根据源 Eclipse 不处理 SecureInputHandler(
来源: http://www.dcepler.net/post.cfm/hiding-password-input-in-ant