banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

JSch SSH接続の問題:例外:アルゴリズムのネゴシエーションに失敗しました

Jenkins を使用してリモート SSH サーバーを設定する際に接続できない問題が発生し、ログを確認した結果、次のエラーが見つかりました。

[SSH] Exception: アルゴリズムの交渉に失敗
com.jcraft.jsch.JSchException: アルゴリズムの交渉に失敗
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

原因の分析: OpenSSH と JSch は、デフォルトでサポートされるキー交換アルゴリズムが異なるため、一方が他方のサポートするキー交換アルゴリズムを有効にする必要があります。

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

  • curve25519-sha256@libssh.org
  • 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

解決策: SSH の設定ファイルである /etc/ssh/sshd_config に以下の 2 行を追加し、SSH が対応するアルゴリズムと MAC をサポートするようにします。

KexAlgorithms curve25519-sha256@libssh.org,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 hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96

設定後、SSH を再起動して問題を解決してください。

参考 http://stackoverflow.com/questions/26424621/algorithm-negotiation-fail-ssh-in-jenkins

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。