Ich versuche ssh von Jenkins auf einen lokalen Server, aber der folgende Fehler wird ausgegeben:
[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
Installierte Version von Java auf dem SSH-Server:
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)
Installierte Java-Version auf dem 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)
Auch diese Lösung ausprobiert: JSchException: Algorithmus-Negotiation . Von PuTTY scheint alles in Ordnung zu sein. Die Verbindung ist hergestellt, aber wenn ich den Jenkins-Job auslöst, wird der Fehler ausgelöst. Sollte ich eine andere Version des SSH-Servers ausprobieren? Jetzt benutze ich copssh.
TL; DR-Bearbeitung Ihrer sshd_config und Aktivierung der Unterstützung für diffie-hellman-group-exchange-sha1 und diffie-hellman-group1-sha1 in KexAlgorithms:
KexAlgorithms [email protected],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
Ich vermute, dass das Problem nach der folgenden Änderung in OpenSSH 6.7 aufgetreten ist: "Der Standardsatz von Verschlüsselungen und MACs wurde geändert, um unsichere Algorithmen zu entfernen." (siehe changelog ). Diese Version wurde am 6. Oktober veröffentlicht und am 21. Oktober für Debian-Tests (siehe Debian changelog ) veröffentlicht.
OpenSSH aktiviert standardmäßig nur die folgenden Schlüsselaustauschalgorithmen:
Während JSch behauptet, diese Algorithmen (siehe unter "Funktionen") für den Schlüsselaustausch zu unterstützen:
Sie können sich also nicht auf einen gemeinsamen Algorithmus für den Schlüsselaustausch einigen. Das Aktualisieren von sshd_config (und das Neustarten des SSH-Servers) führt den Trick aus. Offenbar soll JSch seit Version 0.1.50 die Methode "diffie-hellman-group-exchange-sha256" unterstützen (siehe changelog ).
Wir hatten das gleiche Problem mit unseren Jenkins (2.21) und dem SSH-Plugin (2.4).
Unsere Lösung ist die Verwendung der nativ Shell-Ausführung. Es scheint, dass die Jenkins-Plugins nicht die gleichen ssh-Verbindungseinstellungen wie die nativ-Shell verwenden.
Sie können also die SSH-Verbindung wie folgt herstellen (ohne das SSH-Plugin):
ssh [email protected] <<'ENDSSH'
echo your remote command here
ENDSSH
Wenn Sie Ihre Remote-Befehle mit dem obigen Code umschließen, funktioniert die Verbindung problemlos.
Mit dieser Lösung brauchen Sie das ssh-Plugin nicht mehr.
Zu Ihrer Information: Wir haben das Problem auf unseren mittwald-Servern, seit sie die openssh auf ihren Servern aktualisiert haben.
Wie hier beschrieben: http://sourceforge.net/p/jsch/mailman/message/32975616/ , in JSch 0.1.51 ist diffie-hellman-group-exchange-sha256 implementiert, jedoch nicht aktiviert. Sie können es mit der Funktion setConfig
wie folgt aktivieren:
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();
In meinem Fall - OpenSSH_6.7p1 auf dem Server - musste ich KexAlgorithms und MACs ändern (zusätzliche Werte für hmac-md5, hmac-sha1, hmac-sha1-96, hmac-md5-96):
KexAlgorithms [email protected],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 [email protected],[email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,[email protected],hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96
Oben sollte platziert werden:
/etc/ssh/sshd_config
Und dann die ssh neu starten:
Sudo /etc/init.d/ssh restart
Ich hatte genau das gleiche Problem . AS Matthieu schlug vor, dass wir einige Schlüsselaustauschalgorithmen in der sshd-config-Datei hinzufügen müssen, die in cygwin> etc> sshd_config ..__ vorhanden ist. Ich habe gerade folgendes hinzugefügt und es hat für mich gearbeitet,
KexAlgorithms diffie-hellman-group1-sha1, Kurve25519-sha256 @ libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman -sha1
Die Datei selbst ist jedoch im Nur-Lese-Modus, so dass wir allen Zugriff gewähren müssen, wie Lesen, Schreiben und Ausführen mit comand Prompt. "chmode 777 sshd_config" . fügen Sie dann die oben genannten Algorithmen hinzu. Stoppen Sie den sshd-Dienst über "net stop sshd" und starten Sie ihn dann "net start sshd".
Habe Spaß....
Das hat mir nur geholfen.
Wenn Sie dieses Problem vorübergehend beheben möchten, laden Sie einfach "Jsch" mit .__ herunter. Mindest. Version 0.1.53 und verschieben Sie es in das SSH-Plugin-Verzeichnis für Beispiel: cp /tmp/jsch-0.1.53.jar/var/lib/jenkins/plugins/ssh/WEB-INF/lib/Vergessen Sie nicht, .__ neu zu starten. Jenkins Sie sollten jetzt in der Lage sein, Ihren Job mit Debian Jessie aufzubauen.
Anstatt dies auf der Server-Seite zu beheben, können Sie auch die Client-Seite aktualisieren. Wenn Sie http://maven.Apache.org/wagon/wagon-providers/wagon-ssh/ in einer neueren Version verwenden (> = 2.12 - aktuelle Version per Sep. 2018 ist 3.2.0), ist dies der Fall Problem tritt nicht mehr auf.
<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>
Update 2018-10-21: Die neueste Version ist jetzt 3.2.0. Aufgrund verschiedener Schwachstellenprobleme würde ich raten, immer eine aktuelle Version von SSH- oder SSL-bezogener Software zu verwenden ...]. Überprüfen und aktualisieren Sie daher Ihre Abhängigkeiten in Ihrem Code.
Wenn Sie hier landen, weil Sie den gleichen Fehler in PyCharm erhalten -
Ich verwende 2016.2.3 und kann nur ein Upgrade durchführen, wenn ich auf das Abonnementmodell konvertiere. Das Problem wird nur in meiner Windows-Box angezeigt. Ich konnte den Remote-Server nicht wie in anderen Antworten (KexAlgorithms) beschrieben aktualisieren.
Meine Lösung ist
PyCharm wird neu gestartet und ich kann ssh zu Remote-Servern.
Ich hatte auch ähnliche Probleme mit ähnlichen Ausnahmen auf der Jenkins-Konsole. Dann versuchte ich die Lösung von Matthieu Wipliez. Es funktionierte jedoch nicht, da auf meinem SSH-Server (Remote-Rechner: Linux ubuntu 16.04) bereits dieselbe Konfiguration vorgenommen wurde.
Nachdem ich einige Stunden verbracht hatte, habe ich gerade meine SSH Plugin - Version überprüft, die 2.1 war, und ich habe sie auf den neuesten Stand (2.5) aktualisiert.
Und raten Sie mal, was es funktioniert hat !!
Ich weiß nicht, ob es in jedem ähnlichen Fall funktionieren wird, aber ich möchte vorschlagen, es zuerst zu versuchen. Es kann Ihre Zeit sparen.