关于jsch连接sftp提示DH key size must be multiple of 64,以及更改jsch算法列表

这个是因为jdk8的一个bug引起的,见

[JDK-8164963] InvalidAlgorithmParameterException prime size issue after JDK upgrade with JSCH libraries - Java Bug System

使用jsch0.1.55的话,需要修改com.jcraft.jsch.DHGEX(上文链接有提到),大概在80行

try {
  Class c = Class.forName(session.getConfig("dh"));
  // Since JDK8, SunJCE has lifted the keysize restrictions
  // from 1024 to 2048 for DH.
  //参考https://bugs.openjdk.org/browse/JDK-8164963
  preferred = max = 1024;
  dh = (com.jcraft.jsch.DH) (c.newInstance());
  dh.init();
} catch (Exception e) {
  throw e;
}

如果使用Maven Repository: com.github.mwiede » jsch这个包,则没有这个问题。

如果需要新增更安全的加密算法,按以下方法增加:

  static {
    JSch.setConfig("kex", JSch.getConfig("kex") + ",diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1");
    JSch.setConfig("server_host_key", JSch.getConfig("server_host_key") + ",ssh-rsa,ssh-dss");
  }

使用ssh -v可以看到可以看到可以协商的算法列表。

posted @ 2025-04-25 23:19  Jackie_JK  阅读(31)  评论(0)    收藏  举报