开发者

Apache Ants sshexec task and a passphrase problem under Mac OS X

开发者 https://www.devze.com 2023-01-13 10:56 出处:网络
I would like to use a sshexec task in Apache Ant under Mac OS X like this: <!-- ... --> <target name=\"uname\">

I would like to use a sshexec task in Apache Ant under Mac OS X like this:

<!-- ... -->
<target name="uname">
    <sshexec host="${host}" keyfile="${user.home}/.ssh/id_rsa" username="${user}" command="uname -ar" />
</target>
<!-- ... -->

But i will only get an error "Auth cancel" for "ant uname":

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)

After playing around i just fo开发者_高级运维und out that i have to add my passphrase as a parameter "passphrase" to the task:

<!-- ... -->
<target name="uname">
    <sshexec host="${host}" keyfile="${user.home}/.ssh/id_rsa" passphrase="my.secret.passpgrase" username="${user}" command="uname -ar" />
</target>
<!-- ... -->

But i have perfectly setup Mac OS X with a working integration for the passphrases management to my keychain. So i don't have to enter the passphrase every time.

Is there a way that the sshexec and also the scp task can use the phrases stored in my keychain?


I just ran into this myself and have an alternate solution: remove your passphrase from your key pair. It seems that jsch can't access the local key chain so you either have to put the passphrase in the ant task or remove it from the keys. Here's how to remove it:

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.
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号