詹金斯中的算法协商失败 SSH

2022-09-01 03:34:30

我正在尝试从 Jenkins 到本地服务器,但抛出以下错误:

[SSH] Exception:Algorithm negotiation fail
    com.jcraft.jsch.JSchException: Algorithm negotiation fail
    at com.jcraft.jsch.Session.receive_kexinit(Session.java:520)
    at com.jcraft.jsch.Session.connect(Session.java:286)
    at com.jcraft.jsch.Session.connect(Session.java:150)
    at org.jvnet.hudson.plugins.SSHSite.createSession(SSHSite.java:141)
    at org.jvnet.hudson.plugins.SSHSite.executeCommand(SSHSite.java:151)
    at org.jvnet.hudson.plugins.SSHBuildWrapper.executePreBuildScript(SSHBuildWrapper.java:75)
    at org.jvnet.hudson.plugins.SSHBuildWrapper.setUp(SSHBuildWrapper.java:59)
    at hudson.model.Build$BuildExecution.doRun(Build.java:154)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:533)
    at hudson.model.Run.execute(Run.java:1754)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:89)
    at hudson.model.Executor.run(Executor.java:240)
Finished: FAILURE

在 SSH 服务器上安装的 Java 版本:

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

客户端上已安装的 java 版本:

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

还尝试了这个解决方案:JSchException:算法协商失败,但它不起作用。从腻子开始,一切似乎都还好。连接已建立,但当我触发 Jenkins 作业时,会引发错误。我应该尝试另一个版本的ssh服务器。现在我正在使用copssh。


答案 1

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

我怀疑在OpenSSH 6.7中的以下更改之后出现了问题:“默认的密码和MAC集已被更改以删除不安全的算法。(请参阅更新日志)。这个版本于 10 月 6 日发布,并于 10 月 21 日发布,以进行 Debian 测试(参见 Debian 更改日志)。

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

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

而JSch声称支持这些算法(参见“功能”)进行密钥交换:

  • diffie-hellman-group-exchange-sha1
  • diffie-hellman-group1-sha1

因此,他们确实无法就通用的密钥交换算法达成一致。更新sshd_config(并重新启动SSH服务器)可以解决问题。显然,JSch应该从0.1.50版本开始支持“diffie-hellman-group-exchange-sha256”方法(参见更新日志)。


答案 2

如下所述:http://sourceforge.net/p/jsch/mailman/message/32975616/,在 JSch 0.1.51 中实现了 diffie-hellman-group-exchange-sha256,但未启用。您可以使用以下功能启用它:setConfig

JSch jsch = new JSch();

java.util.Properties configuration = new java.util.Properties();
configuration.put("kex", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256");
configuration.put("StrictHostKeyChecking", "no");

Session session = jsch.getSession("username", "hostname", 22);
session.setPassword("password");
session.setConfig(configuration);
session.connect();

推荐