ANT SSHEXEC失败,算法协商失败错误

时间:2014-02-03 10:17:31

标签: ant ssh jsch

我只是想使用ant sshexec任务连接到远程主机。我在ant lib目录中有所需的jar,并且能够使用putty连接到远程主机。 这是我运行ssh的方式

 <sshexec host="host"
username="username"
password="password"
trust="yes"
command="ls"/>

似乎加密算法与服务器不匹配。如何指定算法,因为我没有看到此任务的任何属性[Ant doc] [1]。这是我得到的错误日志:

com.jcraft.jsch.JSchException: Algorithm negotiation fail
    at com.jcraft.jsch.Session.receive_kexinit(Session.java:540)
    at com.jcraft.jsch.Session.connect(Session.java:288)
    at com.jcraft.jsch.Session.connect(Session.java:145)
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:212)
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHExec.execute(SSHExec.java:158)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    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:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

2 个答案:

答案 0 :(得分:2)

TL; DR编辑你的sshd_config并在KexAlgorithms中启用对diffie-hellman-group-exchange-sha1和diffie-hellman-group1-sha1的支持:

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

KexAlgorithms curve25519-sha256 @ libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-赫尔曼组交换-SHA1,的Diffie-Hellman-组1-SHA1 我怀疑在OpenSSH 6.7中发生以下更改后问题出现了:“默认的密码和MAC集已被更改以删除不安全的算法。” (见changelog)。这个版本于10月6日发布,并于10月21日在Debian测试中发布(见Debian changelog)。

默认情况下,OpenSSH仅启用以下密钥交换算法:

curve25519-sha256@libssh.org ECDH-SHA2-nistp256 ECDH-SHA2-nistp384 ECDH-SHA2-nistp521 的Diffie-Hellman组交换-SHA256 的Diffie-Hellman-group14-SHA1 而JSch声称支持these algorithms(见“功能”下)进行密钥交换:

的Diffie-Hellman群交换-SHA1 的Diffie-Hellman-组1-SHA1 实际上,他们无法就共同密钥交换算法达成一致。更新sshd_config(并重新启动SSH服务器)可以解决问题。显然,从版本0.1.50开始,JSch应该支持“diffie-hellman-group-exchange-sha256”方法(参见changelog)。

答案 1 :(得分:1)

我在尝试连接到OS X 10.11.6时遇到了同样的错误,并且可以通过将~/.ant/lib/jsch-0.1.51.jar替换为最新的~/.ant/lib/jsch-0.1.54.jar来解决此问题。