Подтвердить что ты не робот

Ошибка согласования алгоритма 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.

4b9b3361

Ответ 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).

Мое решение

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

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