2

谁能建议如何使用 Camel SSH 组件指定 keyPairProvider 选项?

我正在尝试使用 Camel SSH 组件和 KeyPairProvider 选项连接到远程 SSH 服务器。文档不清楚如何使用此选项、我们需要提供的语法或值等。我尝试提供类名、完整的类路径、密钥文件名等。没有任何效果。我总是收到以下错误。

Caused by: java.lang.IllegalArgumentException: Could not find a suitable setter for property: keyPairProvider as there isn't a setter method with same type: java.lang.String nor type conversion possible: No type converter available to convert from type: java.lang.String to the required type: org.apache.sshd.common.KeyPairProvider with value file:com.example.tree.custom.CustomFileKeyPairProvider
    at org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:555)
    at org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:565)
    at org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:453)
    at org.apache.camel.util.EndpointHelper.setProperties(EndpointHelper.java:249)
    at org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:264)
    at org.apache.camel.component.ssh.SshComponent.createEndpoint(SshComponent.java:47)
    at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:120)
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:508)
    ... 18 more

这是我的路线

from("direct:sshroute")
.to("ssh://sshuser1@10.115.136.176?keyPairProvider=com.example.tree.custom.CustomFileKeyPairProvider")

如果我不给 keyPairProvider 并更改使用密码的路线,它工作正常。

我还想提一下,如果我创建自己的 SSHComponent,设置 CustomFileKeyPairProvider 并将其添加到 CamelContext(在测试包中给出),它也可以正常工作。但是只想知道如果我们使用默认的骆驼组件,我们如何使用这个选项。

谢谢 - 拉维

4

2 回答 2

0

我一直试图想出这个问题的答案,因为我还需要能够通过 Camel SFTP 路由传递文件。幸运的是,我找到了有效的方法。

基本上,您需要做的是向您的骆驼路线提供私钥,而不是公钥。这里的假设是您生成了一个与远程 SSH/SFTP 服务器共享的公钥,将该公钥传递给远程站点,并且您或远程管理员将该文件放在远程站点上的“authorized_keys”容器中.

话虽如此,您可以这样构建您的 Camel SFTP 路由:

<to uri="sftp://username@remote_server_address/directoryname?privateKeyFile=/full/path/to/your/private_key/id_dsa&amp;knownHostsFile=/full/path/to/your/known_hosts" />

使用此地址,我无需登录即可将文件发送到远程目的地:

11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Connecting to 10.0.0.110 port 22
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Connection established
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Remote version string: SSH-2.0-OpenSSH_6.4
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Local version string: SSH-2.0-JSCH-0.1.44
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_KEXINIT sent
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_KEXINIT received
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> kex: server->client aes128-ctr hmac-md5 none
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> kex: client->server aes128-ctr hmac-md5 none
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_KEXDH_INIT sent
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> expecting SSH_MSG_KEXDH_REPLY
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> ssh_rsa_verify: signature true
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Host '10.0.0.110' is known and mathces the RSA host key
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_NEWKEYS sent
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_NEWKEYS received
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_SERVICE_REQUEST sent
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> SSH_MSG_SERVICE_ACCEPT received
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Authentications that can continue: publickey,keyboard-interactive,password
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Next authentication method: publickey
11/27 23:35:03 INFO  [aCamelQueue]] SftpOperations                 - JSCH -> Authentication succeeded (publickey)

我在我的网站上详细介绍了我的发现,但这是主要内容。祝你好运!

于 2013-11-28T08:29:24.620 回答
0

如果您正在寻找使用密钥对的 SSH 连接,您可以使用该certResource选项进行操作,例如

from("direct:sshroute")
.to("ssh://sshuser1@10.115.136.176?certResource=file:path/to/your/private_key)

文档中说您可以在路径前加上classpath:,file:http:, 但我只尝试过file:.

于 2018-01-04T04:25:10.293 回答