我只是想使用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)
答案 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
来解决此问题。