Ошибка согласования алгоритма SSH в Дженкинсе
Я пытаюсь передать ssh из 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
Установленная версия Java на сервере 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)
Установленная версия 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: ошибка согласования алгоритма
но он не работает. От шпатлевки все кажется в порядке. Соединение установлено, но когда я запускаю задание Дженкинса, возникает ошибка. Должен ли я попробовать другую версию ssh-сервера. Теперь я использую copssh.
Ответы
Ответ 1
TL; DR отредактируйте свой sshd_config и включите поддержку diffie-hellman-group-exchange-sha1 и diffie-hellman-group1-sha1 в 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
Я подозреваю, что проблема возникла после следующего изменения в OpenSSH 6.7: "Набор шифров и MAC-адресов по умолчанию был изменен для удаления небезопасных алгоритмов". (см. журнал изменений). Эта версия была выпущена 6 октября и посвящена 21 октября тестированию Debian (см. Debian changelog).
OpenSSH по умолчанию использует только следующие алгоритмы обмена ключами:
- [email protected]
- ECDH-SHA2-nistp256
- ECDH-SHA2-nistp384
- ECDH-SHA2-nistp521
- Диффи-Хеллмана-группа-обмен-sha256
- Диффи-Хеллмана-group14-sha1
В то время как JSch утверждает, что поддерживает эти алгоритмы (см. раздел "Возможности" ) для обмена ключами:
- Диффи-Хеллмана-группа-обмен-sha1
- Диффи-Хеллмана-group1-sha1
Таким образом, они не могут согласиться на общий алгоритм обмена ключами. Обновление sshd_config (и перезапуск SSH-сервера) делает трюк. По-видимому, JSch должен поддерживать метод "diffie-hellman-group-exchange-sha256" с версии 0.1.50 (см. changelog).
Ответ 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();
Ответ 3
У нас была та же проблема с нашими дженкинсами (2.21) и плагином SSH (2.4)
Наше решение - использовать выполнение оболочки nativ. Кажется, что плагины jenkins не используют те же настройки соединения ssh, что и оболочка nativ.
Итак, вы можете сделать ssh-подключением таким образом (без ssh-plugin):
ssh [email protected] <<'ENDSSH'
echo your remote command here
ENDSSH
Если вы завершаете свои удаленные команды кодом выше, соединение работает нормально.
С помощью этого решения вам больше не нужен ssh-plugin.
Для вашей информации: У нас возникла проблема на наших серверах mittwald, так как они обновили openssh на серверах.
Ответ 4
В моем случае - OpenSSH_6.7p1 на сервере - мне пришлось модифицировать KexAlgorithms и MAC (дополнительные значения 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
Выше должно быть помещено:
/etc/ssh/sshd_config
И затем перезапустите ssh:
sudo /etc/init.d/ssh restart
Ответ 5
Я столкнулся с такой же проблемой.
AS Matthieu предположил, что нам нужно добавить алгоритм обмена ключами в файл sshd-config, присутствующий в cygwin > etc > sshd_config.
Я только что добавил следующее, и это сработало для меня,
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
Но сам файл находится в режиме только для чтения, поэтому мы должны предоставить ему все доступ, например чтение, запись и выполнение, хотя команда comand. msgstr "chmode 777 sshd_config".
затем добавьте выше упомянутые алгоритмы. остановите службу sshd через "net stop sshd", а затем запустите "net start sshd".
Удачи...
Ответ 6
Только это мне помогло.
Если вы хотите временно исправить эту проблему, просто загрузите "Jsch" с помощью минимум версии 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
Ответ 7
Вместо того, чтобы устанавливать это на стороне сервера, вы также можете обновить клиентскую сторону . Если вы используете http://maven.apache.org/wagon/wagon-providers/wagon-ssh/ в своей последней версии ( >= 2.12), эта проблема больше не встречается.
<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>
Ответ 8
Я также столкнулся с такой же проблемой с аналогичными исключениями на консоли Jenkins. Затем я попробовал решение Маттиу Уиппеса. Но это не сработало, поскольку на моем SSH-сервере уже была выполнена одна конфигурация (Удаленная машина: Linux ubuntu 16.04).
Проведя несколько часов, я просто проверил версию плагина для SSH, которая была 2.1, и я только что обновил ее до последней версии (2.5).
И угадайте, что это сработало!
Я не знаю, будет ли это работать во всех подобных случаях, но я хотел бы предложить попробовать сначала. Это может сэкономить ваше время.
Ответ 9
Если вы закончите здесь, потому что вы получите ту же ошибку в PyCharm -
Я использую 2016.2.3 и могу только обновить, если я конвертирую в модель подписки. Проблема видна только на моем ящике Windows. Мне не удалось обновить удаленный сервер, как описано в других ответах (KexAlgorithms).
Мое решение
- Нажмите "Справка"
- Выберите "Найти действие"
- Введите "Switch IDE Boot JDK.."
- Используйте стрелку раскрывающегося списка и нажмите кнопку "..."
- Найдите версию JAVA, которую вы используете на своем локальном компьютере, и выберите эту папку.
PyCharm перезапускается, и я могу передать ssh на удаленные серверы.