我想在Mac OS X下的Apache Ant中使用sshexec任务,如下所示:
<!-- ... -->
<target name="uname">
<sshexec host="${host}" keyfile="${user.home}/.ssh/id_rsa" username="${user}" command="uname -ar" />
</target>
<!-- ... -->
但是我只会在“ant uname”中收到错误“Auth取消”:
BUILD FAILED
/build.xml:78: com.jcraft.jsch.JSchException: Auth cancel
at com.jcraft.jsch.Session.connect(Session.java:460)
at com.jcraft.jsch.Session.connect(Session.java:154)
at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:223)
at org.apache.tools.ant.taskdefs.optional.ssh.SSHExec.execute(SSHExec.java:190)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
at org.apache.tools.ant.Main.runBuild(Main.java:801)
at org.apache.tools.ant.Main.startAnt(Main.java:218)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
在玩完之后,我发现我必须将我的密码作为参数“passphrase”添加到任务中:
<!-- ... -->
<target name="uname">
<sshexec host="${host}" keyfile="${user.home}/.ssh/id_rsa" passphrase="my.secret.passpgrase" username="${user}" command="uname -ar" />
</target>
<!-- ... -->
但我已经完美地设置了Mac OS X,并将密码管理功能集成到我的钥匙串中。所以我不必每次都输入密码。
有没有办法让sshexec和scp任务可以使用存储在我的钥匙串中的短语?
答案 0 :(得分:2)
我自己也遇到了这个问题并提供了另一种解决方案:从密钥对中删除密码。似乎jsch无法访问本地密钥链,因此您必须将密码短语放入ant任务或将其从密钥中删除。以下是删除它的方法:
prompt% ssh-keygen -p
Enter file in which the key is (~/.ssh/id_rsa): <just hit return if the file printed before the prompt is your key file>
Enter old passphrase: <your current passphrase>
Key has comment '~/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase): <hit return to remove the passphrase>
Enter same passphrase again: <hit return again>
Your identification has been saved with the new passphrase.