Échec de la négociation de l'algorithme SSH à Jenkins

j'essaie de ssh de Jenkins à un serveur local mais l'erreur suivante est lancée:

[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

version installée de Java sur le serveur SSH:

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)

version installée de java sur le client:

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)

a également essayé cette solution: JSchException: Algorithme de négociation échoue mais cela ne fonctionne pas. De putty tout semble aller bien. La connexion est établie, mais quand Je déclenche le travail de Jenkins, l'erreur est lancée. Devrais-je essayer une autre version de SSH server. Maintenant j'utilise copssh.

31
demandé sur Community 2014-10-17 16:02:49

9 réponses

TL;DR modifier votre sshd_config et d'activer le support pour l'échange de clés diffie-hellman-groupe-exchange-sha1 et l'échange de clés diffie-hellman-group1-sha1 dans KexAlgorithms:

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

je soupçonne que le problème est apparu après le changement suivant dans OpenSSH 6.7:" le jeu par défaut de chiffreurs et MACs a été modifié pour supprimer les algorithmes dangereux.". (voir changelog ). Cette version a été publiée le 6 octobre, et est entrée en vigueur le 21 octobre pour Debian testing (voir Changelog ).

OpenSSH ne permet par défaut que les algorithmes d'échange de clés suivants:

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

alors que JSch prétend supporter ces algorithmes (voir sous" caractéristiques") pour l'échange de clés:

  • diffie-hellman-groupe-exchange-sha1
  • diffie-hellman-group1-sha1

en effet, ils ne peuvent pas s'entendre sur un algorithme commun d'échange de clés. Mettre à jour sshd_config (et redémarrer le serveur SSH) fait l'affaire. Apparemment JSch est censé soutenir le "l'échange de clés diffie-hellman-groupe-exchange-sha256" méthode depuis la version 0.1.50 (voir changelog ).

61
répondu Matthieu Wipliez 2015-04-21 09:13:35

Comme indiqué ici: http://sourceforge.net/p/jsch/mailman/message/32975616/ , dans JSch 0.1.51 l'échange de clés diffie-hellman-groupe-exchange-sha256 est mis en œuvre, mais pas activé. Vous pouvez l'activer en utilisant la fonction setConfig comme suit:

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();
6
répondu Nielsvh 2015-02-26 22:48:55

nous avons eu le même problème avec notre jenkins (2.21) et le plugin SSH (2.4)

notre solution est d'utiliser l'exécution shell nativ. Il semble que les plugins jenkins n'utilisent pas les mêmes paramètres de connexion ssh que le shell nativ.

pour que vous puissiez faire la connexion ssh comme ceci (sans le SSH-plugin):

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

si vous enveloppez vos commandes à distance avec le code au-dessus de la connexion fonctionne très bien.

avec cette solution vous n'avez plus besoin du plugin ssh.

pour votre information: nous avons eu le problème sur nos serveurs mittwald depuis qu'ils ont mis à jour l'openssh sur ces serveurs.

6
répondu bschauer 2016-09-09 06:30:55

j'ai affronté exactement le même problème. Comme Matthieu l'a suggéré, nous devons ajouter un algorithme d'échange de clés dans le fichier sshd-config présent dans cygwin>etc>sshd_config. Je viens d'ajouter ce qui suit et cela a fonctionné pour moi,

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

Mais le fichier est en lecture mode afin de nous fournir tous les accès comme lire,écrire et exécuter si invite de commande. "chmode 777 sshd_config". ajoutez les algorithmes mentionnés ci-dessus. arrêtez le service sshd par le biais de "NET stop sshd", puis démarrez-le par le biais de"net start sshd".

amusez-vous bien....

2
répondu Eagle 2015-05-01 20:52:16

la seule chose qui m'a aidé.

si vous souhaitez corriger temporairement ce problème, il vous suffit de télécharger "Jsch" avec min. version de 0.1.53 et le déplacer dans le répertoire de plugin SSH, pour exemple: cp/tmp / jsch-0.1.53.pot /var/lib/jenkins/plugins/ssh/WEB-INF/lib/ N'oubliez pas de redémarrer Jenkins. Vous devriez maintenant être en mesure de construire votre travail avec Debian Jessie.

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

1
répondu 4xy 2017-01-13 17:36:52

au lieu de corriger cela sur le côté serveur , vous pouvez également mettre à jour le côté client . Si vous utilisez http://maven.apache.org/wagon/wagon-providers/wagon-ssh / dans sa dernière version (>= 2.12), ce problème ne se produit plus.

<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>2.12</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <!-- ... -->
</project>
0
répondu Alexander 2017-05-09 09:02:58

j'ai également fait face au même problème avec des exceptions similaires sur Jenkins console. Puis J'ai essayé la solution de Matthieu Wipliez. Mais cela n'a pas fonctionné car la même configuration a déjà été faite sur mon serveur SSH (machine distante: Linux ubuntu 16.04).

après avoir passé quelques heures, je viens de vérifier ma version de SSH plugin qui était 2.1 et je viens de le mettre à jour à la dernière (2.5).

et devinez ce qui a fonctionné!!

Je ne sais pas si cela fonctionnera dans tous les cas similaires, mais je voudrais suggérer de l'essayer d'abord. Il peut sauver votre temps.

0
répondu Amey Deshmukh 2018-02-16 13:01:22

si vous vous retrouvez ici parce que vous avez la même erreur dans PyCharm -

j'utilise 2016.2.3 et ne peux mettre à jour que si je passe au modèle d'abonnement. Le problème n'est vu que sur ma fenêtre. J'ai été incapable de mettre à jour le serveur distant comme décrit dans d'autres réponses (KexAlgorithms).

ma solution est

  1. Cliquez Sur " Aide
  2. Sélectionner" Trouver Une Action "
  3. Type "Switch IDE Boot JDK.."
  4. utilisez la flèche "drop down" et cliquez sur le bouton "..."option
  5. trouvez la version de JAVA que vous utilisez sur votre machine locale et sélectionnez ce dossier.

PyCharm redémarre et je peux SSH aux serveurs distants.

0
répondu FineJ 2018-03-26 09:32:09