Jenkins中的算法协商失败了SSH

时间:2014-10-17 12:02:50

标签: java ssh jenkins jsch

我试图从Jenkins ssh到本地服务器但是引发了以下错误:

[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: Algorithm negotiation fail 但它不起作用。从腻子一切似乎都没问题。建立连接,但是当我触发Jenkins作业时,会抛出错误。我应该尝试另一个版本的ssh服务器。现在我使用copssh。

8 个答案:

答案 0 :(得分:63)

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集已被更改以删除不安全的算法。” (见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 :(得分:6)

如此处所述: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();

答案 2 :(得分:6)

我们的jenkins(2.21)和SSH插件(2.4)

存在同样的问题

我们的解决方案是使用nativ shell执行。似乎jenkins插件不使用与nativ shell相同的ssh连接设置。

所以你可以像这样连接ssh(没有ssh-plugin):

ssh user@host <<'ENDSSH'
 echo your remote command here
ENDSSH 

如果使用上面的代码包装远程命令,则连接正常。

使用此解决方案,您不再需要ssh-plugin。

您的信息:我们在mittwald服务器上遇到了问题,因为他们升级了服务器上的openssh。

答案 3 :(得分:4)

在我的情况下 - 服务器上的OpenSSH_6.7p1 - 我不得不修改Kex算法和MAC(额外的hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96值):

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

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96

上面应放置:

/etc/ssh/sshd_config

然后重新启动ssh:

sudo /etc/init.d/ssh restart

答案 4 :(得分:1)

唯一这对我有帮助。

  

如果您想暂时解决此问题,只需下载&#34; Jsch&#34;同   分钟。版本0.1.53并将其移至SSH插件目录,用于   例如:cp /tmp/jsch-0.1.53.jar   / var / lib / jenkins / plugins / ssh / WEB-INF / lib /别忘了重新启动   詹金斯。你现在应该能够用Debian Jessie建立你的工作。

https://issues.jenkins-ci.org/browse/JENKINS-25258?focusedCommentId=274232&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-274232

答案 5 :(得分:1)

您可以更新客户端,而不是在服务器端上修复此问题。如果您在较新版本中使用http://maven.apache.org/wagon/wagon-providers/wagon-ssh/(&gt; = 2.12 - 截至2018年9月的当前版本为3.2.0),则不再出现此问题。

<project>
  <!-- ... -->
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.6</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.wagon</groupId>
              <artifactId>wagon-ssh</artifactId>
              <version>3.2.0</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <!-- ... -->
</project>

更新 2018-10-21:最新版本现为3.2.0。 由于各种漏洞问题,我建议始终使用当前版本的SSH或SSL相关软件。 因此,请检查并更新代码中的依赖项。

答案 6 :(得分:0)

我在Jenkins控制台上遇到类似例外的问题。 然后我尝试了Matthieu Wipliez的解决方案。但它没有工作,因为我的 SSH服务器(远程机器:Linux ubuntu 16.04)已经完成了相同的配置。

花了几个小时后,我刚刚检查了我的 SSH插件的2.1版本,我刚刚将其更新为最新版本(2.5)。

猜猜它有用!!

我不知道它是否适用于所有类似情况,但我想建议先试试。它可以节省你的时间。

答案 7 :(得分:0)

如果你因为在PyCharm中得到同样的错误而在这里结束 -

我正在使用2016.2.3并且只有在我转换为订阅模型时才能升级。问题只出现在我的Windows机器上。我无法按照其他答案(KexAlgorithms)中的描述更新远程服务器。

我的解决方案是

  1. 点击帮助
  2. 选择“查找操作”
  3. 键入“Switch IDE Boot JDK ..”
  4. 使用下拉箭头并单击“...”选项
  5. 找到您在本地计算机上使用的JAVA版本,然后选择该文件夹。
  6. PyCharm重新启动,我可以ssh到远程服务器。

相关问题