it-roy-ru.com

Алгоритм согласования сбоя 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: сбой согласования алгоритма , Но он не работает. С PuTTY все вроде бы нормально. Соединение установлено, но когда я запускаю задание Jenkins, выдается ошибка. Должен ли я попробовать другую версию сервера SSH. Сейчас я пользуюсь копсш.

32
sarbo

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 ).

63
Matthieu Wipliez

У нас была такая же проблема с нашими jenkins (2.21) и плагином SSH (2.4)

Наше решение заключается в использовании нативного исполнения Shell. Похоже, что плагины jenkins не используют те же настройки соединения ssh, что и нативная оболочка. 

Таким образом, вы можете подключить ssh следующим образом (без ssh-плагина): 

ssh [email protected] <<'ENDSSH'
 echo your remote command here
ENDSSH 

Если вы перенесете свои удаленные команды с кодом выше, соединение будет работать нормально. 

С этим решением вам больше не нужен ssh-плагин. 

Для вашего сведения: у нас возникла проблема на наших серверах mittwald, так как они обновили openssh на этих серверах. 

6
bschauer

Как указано здесь: 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();
6
Nielsvh

В моем случае - 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
4
wierzbiks

Я столкнулся с точно такой же проблемой .. 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

Но сам файл находится в режиме только для чтения, поэтому мы должны предоставить ему все права доступа, такие как чтение, запись и выполнение через командную строку. "chmode 777 sshd_config" . затем добавьте вышеупомянутые алгоритмы. остановите службу sshd через «net stop sshd», а затем запустите ее «net start sshd».

Повеселись....

2
Eagle

Только это помогло мне.

Если вы хотите временно решить эту проблему, просто загрузите "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

1
4xy

Вместо того, чтобы исправить это на стороне server, вы также можете обновить client side. Если вы используете http://maven.Apache.org/wagon/wagon-providers/wagon-ssh/ в более новой версии (> = 2.12 - текущая версия по состоянию на сентябрь 2018 года - 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>

Update 2018-10-21: последняя версия сейчас 3.2.0. Из-за различных уязвимостей я бы посоветовал всегда использовать текущую версию программного обеспечения, связанного с SSH или SSL, в любом случае . Поэтому, пожалуйста, проверьте и обновите свои зависимости в своем коде.

1
Alexander

Если вы оказались здесь, потому что вы получаете ту же ошибку в PyCharm - 

Я использую 2016.2.3 и могу обновиться только если перейду на модель подписки. Проблема видна только на моей коробке Windows. Мне не удалось обновить удаленный сервер, как описано в других ответах (KexAlgorithms).

Мое решение 

  1. Нажмите Справка
  2. Выберите «Найти действие»
  3. Тип "Switch IDE Boot JDK .."
  4. Используйте стрелку выпадающего меню и нажмите «...»
  5. Найдите версию Java, которую вы используете на своем локальном компьютере, и выберите эту папку. 

PyCharm перезагружается, и я могу подключиться к удаленным серверам.

0
FineJ

Я также столкнулся с той же проблемой с похожими исключениями на консоли Jenkins. Тогда я попробовал решение Матье Виплиеса. Но это не сработало, так как такая же конфигурация уже была выполнена на моем SSH сервере (Удаленная машина: Linux Ubuntu 16.04).

Потратив несколько часов, я только что проверил версию моего SSH плагина , которая была 2.1, и я только обновил ее до последней (2.5). 

И угадайте, что это сработало !!

Я не знаю, будет ли это работать в каждом подобном случае, но я хотел бы предложить попробовать это в первую очередь. Это может сэкономить ваше время.

0
Amey Deshmukh