【问题标题】:Getting NoSuchAlgorithmException when creating a directory on SFTP server via JSch通过 JSch 在 SFTP 服务器上创建目录时出现 NoSuchAlgorithmException
【发布时间】:2015-02-20 14:49:51
【问题描述】:

我正在使用 JSch 将文件 SFTP 到我的服务器。

在 Rational Application Developer (RAD) 中,一切都按预期工作。

在 RAD 之外,通过 bat 文件运行我连接到 SFTP 服务器没有任何问题,但是在尝试创建目录时我收到以下错误消息:

com.jcraft.jsch.JSchException:Session.connect:java.security.NoSuchAlgorithmException:DH KeyPairGenerator 不可用

当我通过 bat 文件运行我的 RAD jdk 时,我的机器上没有什么?显然,它可以创建连接,因此我的 bat 文件可以访问jsch-0.1.51.jar,但它缺少我的C:\Progra~1\Java\jre6\bin 中包含在 RAD jre 中的其他一些 jar。

【问题讨论】:

    标签: java jsch


    【解决方案1】:

    你确定

    • 您的 JDK 有一个包含 KeyPairGenerator 类的 JAR 文件(见下文)?
      我在下面记录了包含此类的 JAR 文件。
    • CLASSPATH 是否设置为包含上述 JAR 文件之一的路径?
    • 您的 JAVA_HOME 设置了吗?

    根据 findJAR.com,KeyPairGenerator 类包含在这些 JAR 文件中:

    rt.jar
    org.osgi.foundation-1.0.0.jar
    org.osgi.foundation-1.2.0.jar
    

    我搜索了rt.jar

    • rt.jar 文件位于我的 ANT lib 目录中。
    • rt.jar 文件也在我的 JDK 目录的jre/lib 子目录中。

    如果您在任何地方都没有包含 JAR 文件,请尝试将 ANT lib 目录添加到您的 CLASSPATH。


    此测试 ANT 项目可用于验证 SSH 是否正常工作:

        <?xml version="1.0" encoding="windows-1252" ?>
        <project name="ServerSSH" default="dist" basedir=".">
          <target name="dist">
            <echo message="TEST BEGINNING"></echo>
            <sshexec host="svr1"
                     username="user1"
                     description="Test connection"
                     keyfile="c:/.ssh/id_rsa"
                     trust="true"
                     command="echo CONNECTION SUCCESS FOR SERVER SVR1"
                     failonerror="true"/>
    
            <echo message="TEST END"></echo>
    
          </target>
    
        </project>
    

    可以按如下方式调用此测试:

        set JAVA_HOME=c:\progra~1\Java\jdk1.7.0_21
        set ANT_HOME=C:\ant
        set ANTLIB=c:\ant\lib
        set PATH=%ANT_HOME%\bin;%ANT_HOME%\lib;
        ant -d -lib %ANTLIB% dist -f SSHTEST.xml
    

    通过运行测试,您可以验证 SSH for JAVA 是否可以在项目之外工作。

    【讨论】:

    • 是的,我在 C:\Progra~1\Java\jre6\lib 中有 rt.jar,在我的 bat 文件中我正在设置 PATH: set PATH=.;C:\Progra~1\ Java\jre6\bin;%PATH%
    • 在我的 RAD lib 文件夹中,rt.jar 更旧且尺寸更小,我实际上尝试用 rt.jar 文件替换 C:\Progra~1\Java\jre6\lib 中的 rt.jar 文件当我这样做时,RAD lib 文件夹广告,我的程序甚至无法启动。
    • 我的 rt.jar 是这个大小:26868873
    • 如果您的服务器是 OpenSSH,您确定 OpenSSH 至少是 2.8 版吗?低版本不支持DH算法。
    • 有关 OpenSSH(服务器端)问题的更多信息(如果版本太低,则在尝试使用 JAVA 之前可能不会出现问题),请参阅此 URL:
    【解决方案2】:

    答案是:设置 java.ext.dirs 以包含您的 JAR 时要小心

    http://peterttseng.blogspot.com/2008/09/be-careful-when-setting-javaextdirs-to.html

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 1970-01-01
      • 2021-02-16
      • 2018-09-14
      • 2012-10-04
      • 1970-01-01
      • 2013-01-14
      • 2012-11-07
      • 2017-12-14
      相关资源
      最近更新 更多