当前位置: 首页 > 知识库问答 >
问题:

Apache Camel SFTP:“JSCHEException:无效的私钥:[B@7c033a39“使用OpenSSH私钥

鞠征
2023-03-14

我试图连接到一个sftp服务器与一个新的私钥,开始与BEGIN OPENSSH PRIVATE KEY(旧版本开始与BEGIN RSA PRIVATE KEY)。

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

当连接Camel SFTP(版本3.10)时,我得到一个错误

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://username1@localhost:55040
...
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@7c033a39

如果我在命令行上连接,它会按预期工作-键很好。

我从这个答案中发现错误是由过时的Jsch版本引起的——但这应该在3.10中针对驼峰SSH进行修复https://issues.apache.org/jira/browse/CAMEL-16554,但我想这不会影响sftp?

我如何连接?

有sftp配置来设置“密码”和“密钥交换协议”——这些相关吗?

org.apache.camel.component.file.GenericFileOperationFailedException: Cannot connect to sftp://username1@localhost:55040
    at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:158) ~[camel-ftp-3.10.0.jar:3.10.0]
    at org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:235) ~[camel-ftp-3.10.0.jar:3.10.0]
    at org.apache.camel.component.file.remote.RemoteFileConsumer.prePollCheck(RemoteFileConsumer.java:77) ~[camel-ftp-3.10.0.jar:3.10.0]
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:128) ~[camel-file-3.10.0.jar:3.10.0]
    at org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190) [camel-support-3.10.0.jar:3.10.0]
    at org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107) [camel-support-3.10.0.jar:3.10.0]
    at org.apache.camel.pollconsumer.quartz.QuartzScheduledPollConsumerJob.execute(QuartzScheduledPollConsumerJob.java:61) [camel-quartz-3.10.0.jar:3.10.0]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.3.2.jar:?]
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar:?]
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@7c033a39
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:664) ~[jsch-0.1.55.jar:?]
    at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:46) ~[jsch-0.1.55.jar:?]
    at com.jcraft.jsch.JSch.addIdentity(JSch.java:441) ~[jsch-0.1.55.jar:?]
    at org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:233) ~[camel-ftp-3.10.0.jar:3.10.0]
    at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:125) ~[camel-ftp-3.10.0.jar:3.10.0]
    ... 8 more

在我的项目中

  • 组织。阿帕奇。骆驼springboot:camel ftp启动器
  • com.github.mwiede:jsch:0.1。63
mvn dependency:tree -Dincludes=com.jcraft:jsch
[INFO] Scanning for projects...
[INFO] 
[INFO] --------< com.project >---------
[INFO] Building com.project
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ com.project ---
[INFO] com.project:jar:${sha1}
[INFO] \- org.apache.camel.springboot:camel-ftp-starter:jar:3.10.0:compile
[INFO]    \- org.apache.camel:camel-ftp:jar:3.10.0:compile
[INFO]       \- com.jcraft:jsch:jar:0.1.55:compile

共有1个答案

韶和璧
2023-03-14

要替换由camel ftp starter引入的Jsch库,可以使用如下所示的exclude标记:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- First define the library of jsch fork -->
        <dependency>
            <groupId>com.github.mwiede</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.63</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-ftp-starter</artifactId>
            <version>3.9.0</version>
            <!-- exclude original jsch -->
            <exclusions>
                <exclusion>
                    <artifactId>jsch</artifactId>
                    <groupId>com.jcraft</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

确保没有其他依赖项拉动jcraft。jsch工件。

 类似资料:
  • 问题内容: 我正在使用以下代码在Java应用程序中使用Git。我有一个有效的密钥(一直使用),并且之前使用相同的密钥和git存储库,此特定代码对我有用,但是现在出现以下异常: 无效的私钥:[B @ 59c40796。 在这一行: 我的完整代码: 在线搜索后,我将createDefaultJSch更改为使用pemWriter: 但是仍然会收到 “无效的私钥” 异常。 问题答案: 我也偶然发现了这个问

  • 我使用以下代码在Java应用程序中使用Git。我有一个有效的密钥(一直使用它),并且这个特定的代码在使用相同的密钥和git存储库之前对我有用,但是现在我得到了以下异常: 无效的私钥:[B@59c40796。 在这一行: 我的完整代码: 在线搜索后,我将createDefaultJSch更改为使用pemWriter: 但仍然得到“无效私钥”异常。

  • 我使用NetBeans7.2运行JDK1.7和Windows7,我使用putty-keygen生成了一个SSH私钥和公钥对(SSH2-2048位)。我没有任何私钥密码。我现在正尝试使用SFTP连接到其中一台主机。但是当我传递私钥(ppk)来设置身份时,代码返回无效私钥错误。我在WinSCP中使用了相同的私钥来连接到相同的主机&它工作得很好。请帮助我解决这个错误。下面是我的代码:

  • 问题内容: 我正在使用netbeans 7.2运行JDK 1.7和Windows 7,我已经使用putty- keygen生成了SSH私钥和公钥对(SSH2-2048位)。我没有私钥密码。我现在正在尝试使用SFTP连接到主机之一。但是,当我通过私钥(ppk)设置身份时,代码将返回无效的私钥错误。我在WinSCP中使用了相同的私钥来连接到相同的主机,并且工作正常。请帮助我解决错误。这是我的代码: 问

  • 我有一个OpenSSH格式的私钥文件: 但我需要RSA格式: 在终端我会这样做: 但我需要用Java来做。 我尝试使用org.bouncycastle.openssl.PEMWriter,但我无法解决如何将我的输入键(作为输入字符串)转换为可传递给PEMWriter的Private ateKey对象。

  • 我正在使用Mac上的ssh-keygen生成的公钥/私钥设置文件到服务器的SFTP传递。我生成的私钥看起来与代码库中的其他私钥不同(它没有标头,是“OpenSSH私钥”而不是“RSA私钥”)。