web-dev-qa-db-ja.com

JenkinsでアルゴリズムネゴシエーションがSSHに失敗する

Jenkinsからローカルサーバーにsshしようとしていますが、次のエラーがスローされます:

[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

SSHサーバーに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)

クライアントにインストールされた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:Algorithm negotiation fail しかし、それは機能していません。 PuTTYからはすべて問題ないようです。接続は確立されますが、Jenkinsジョブをトリガーするとエラーがスローされます。別のバージョンのsshサーバーを試す必要があります。今、私はcopsshを使用しています。

33
sarbo

TL; DR sshd_configを編集し、KexAlgorithmsでdiffie-hellman-group-exchange-sha1およびdiffie-hellman-group1-sha1のサポートを有効にします。

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のセットは、安全でないアルゴリズムを削除するために変更されました。」 ( changelog を参照)。このバージョンは10月6日にリリースされ、10月21日にDebianテスト用に作成されました( Debian changelog を参照)。

OpenSSHは、デフォルトで次のキー交換アルゴリズムのみを有効にします。

  • [email protected]
  • ecdh-sha2-nistp256
  • ecdh-sha2-nistp384
  • ecdh-sha2-nistp521
  • diffie-hellman-group-exchange-sha256
  • diffie-hellman-group14-sha1

JSchは、キー交換について これらのアルゴリズム (「機能」を参照)をサポートすると主張しています。

  • diffie-hellman-group-exchange-sha1
  • diffie-hellman-group1-sha1

確かに、彼らは共通の鍵交換アルゴリズムに同意することはできません。 sshd_configを更新(およびSSHサーバーを再起動)することで問題は解決します。 JSchは、バージョン0.1.50以降、「diffie-hellman-group-exchange-sha256」メソッドをサポートしているようです( changelog を参照)。

64

Jenkins(2.21)とSSHプラグイン(2.4)で同じ問題が発生しました

私たちの解決策は、nativ Shellの実行を使用することです。 jenkinsプラグインはnativ Shellと同じssh接続設定を使用していないようです。

したがって、sshを次のように接続できます(sshプラグインなし)。

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

リモートコマンドを上記のコードでラップすると、接続は正常に機能します。

このソリューションでは、ssh-pluginはもう必要ありません。

あなたの情報について:mittwaldサーバーでopenshをアップグレードしたため、問題が発生しました。

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

サーバー側でこれを修正する代わりに、クライアント側を更新することもできます-)。 http://maven.Apache.org/wagon/wagon-providers/wagon-ssh/ を新しいバージョンで使用する場合(> = 2.12-2018年9月現在のリリースは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>

Update2018-10-21:最新バージョンは現在3.2.0です。さまざまな脆弱性の問題があるため、常に最新バージョンのSSHまたはSSL関連ソフトウェアを使用することをお勧めします。そのため、コードの依存関係を確認して更新してください。

2
Alexander

私はまったく同じ問題に直面しました。 ASマシューは、cygwin> etc> sshd_configにある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 Promptを使用して読み取り、書き込み、実行などのすべてのアクセスを提供する必要があります。 「chmode 777 sshd_config」。次に、上記のアルゴリズムを追加します。 「net stop sshd」で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

あなたがPyCharmで同じエラーを受け取ったためにここで終わる場合-

2016.2.3を使用していますが、サブスクリプションモデルに変換した場合にのみアップグレードできます。問題は、Windowsボックスでのみ見られます。他の回答(KexAlgorithms)で説明されているように、リモートサーバーを更新できませんでした。

私の解決策は

  1. ヘルプをクリック
  2. 「アクションの検索」を選択します
  3. 「Switch IDE Boot JDK ..」と入力します。」
  4. ドロップダウン矢印を使用して、「...」オプションをクリックします
  5. ローカルマシンで使用しているJavaのバージョンを見つけ、そのフォルダーを選択します。

PyCharmが再起動し、リモートサーバーにSSH接続できます。

0
FineJ

Jenkinsコンソールでも同様の例外があり、同じ問題に直面しました。次に、Matthieu Wipliezのソリューションを試しました。しかし、同じ設定がすでにSSHサーバー(リモートマシン:Linux ubuntu 16.04)で行われているため、機能しませんでした。

数時間を費やした後、私はSSHプラグインのバージョン2.1をチェックし、それを最新(2.5)に更新しました。

そして、それがうまくいったと思います!!

同様のケースすべてで機能するかどうかはわかりませんが、最初に試してみることをお勧めします。時間を節約できます。

0
Amey Deshmukh