【问题标题】:Camel SFTP component - SSH private key URI works with privateKeyFile, doesn't work with privateKeyCamel SFTP 组件 - SSH 私钥 URI 适用于 privateKeyFile,不适用于 privateKey
【发布时间】:2019-12-21 01:40:06
【问题描述】:

我有一条看起来像下一条的骆驼路线:

from("direct:download")
        .pollEnrich()
        .simple("sftp://my.host:22/folder/?username=foo&fileName=${header.CamelFileName}
        &privateKeyFile=src/main/resources/privateSSHKey")
        .to("file://state/downloaded");

文件 src/main/resources/privateSSHKey 是一个 RSA 私钥。这没有问题:JSCH(Camel 用于 SFTP 端点的库)设法连接并下载所需的文件。

以前的设置在开发时是可以的,因为我可以在本地拥有带有密钥的文件。 但是,对于 prod,我们有其他系统,我可以在其中获取包含密钥内容的字节数组。为此,我将路线更改为如下所示:

from("direct:download")
        .pollEnrich()
        .simple("sftp://my.host:22/folder/?username=foo&fileName=${header.CamelFileName}
     &privateKey=" + URLEncoder.encode(new String(sshPrivateKey), "UTF-8"))
        .to("file://state/downloaded");

...作为 sshPrivateKey 字节数组。不幸的是,我总是从 JSCH 获得“auth_cancel”,调试我可以看到在尝试与 SFTP 服务器握手时会发生这种情况。

我错过了什么吗?我很确定编码 sshPrivateKey byte[] 是可行的方法(如果我不这样做,JSCH 会抱怨错误的密钥),但我不确定我还缺少什么?

【问题讨论】:

  • 在注册表中存储私钥的字节数组stackoverflow.com/questions/57396184/…
  • @raspayu 你设法解决了这个问题吗?我有完全相同的问题,我不太明白如何在注册表中设置我的私钥以及为什么

标签: java apache-camel jsch


【解决方案1】:

问题的根源在于编码,URLEncoding、byteString 可能会丢失一些字符,例如+\\。 我设法使它与 privateKey 方法 Java DSL 的 Byte[] 参数一起工作。

例子:

String privateKeyString = Files.readString(Path.of("/.ssh/private_key_rsa"), StandardCharsets.UTF_8);
Byte[] privateKeyAsByteArray = ArrayUtils.toObject(privateKeyString.getBytes());

from("file://tmp")
.to(sftp("localhost")
        .username("test")
        .privateKey(privateKeyAsByteArray));

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 2021-01-25
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2011-02-07
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多