[ 
https://issues.apache.org/jira/browse/CAMEL-22472?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18023798#comment-18023798
 ] 

Claus Ibsen commented on CAMEL-22472:
-------------------------------------

Its the same, the fluent builder end up creating uris

> camel-sftp - private key and known hosts can't be specified via String 
> argument
> -------------------------------------------------------------------------------
>
>                 Key: CAMEL-22472
>                 URL: https://issues.apache.org/jira/browse/CAMEL-22472
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-sftp
>    Affects Versions: 4.14.0
>            Reporter: Jannik Schmeier
>            Priority: Minor
>
> After upgrading camel to 4.14.0 from 4.12.0 I have noticed that my camel sftp 
> routes are having issues.
> I am using endpoint builder kind of like this:
> {code:java}
> SftpEndpointConsumerBuilder builder = sftp(uri)
>         .privateKey("my+private+key")
>         .privateKeyPassphrase("my private key passphrase")
>         .knownHosts("<host,ip> <type> ABC+123/ABC"); {code}
>  
> 1. known hosts specified as String are causing Base64 exceptions:
> {noformat}
> org.apache.camel.component.file.GenericFileOperationFailedException: Cannot 
> connect to sftp://<user>@<host>:<port>
>     at 
> org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:143)
>     at 
> org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:249)
>     at 
> org.apache.camel.component.file.remote.SftpConsumer.doStart(SftpConsumer.java:71)
>     at 
> org.apache.camel.support.service.BaseService.start(BaseService.java:123)
>     at 
> org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:127)
>     at 
> org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3457)
>     at 
> org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:430)
>     at 
> org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:346)
>     at 
> org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:222)
>     at 
> org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:255)
>     at 
> org.apache.camel.impl.engine.AbstractCamelContext.startRouteService(AbstractCamelContext.java:3506)
>     at 
> org.apache.camel.impl.engine.AbstractCamelContext.startRoute(AbstractCamelContext.java:1181)
>     at 
> org.apache.camel.impl.engine.AbstractCamelContext.startRoute(AbstractCamelContext.java:1170)
>     at 
> org.apache.camel.impl.engine.InternalRouteController.startRoute(InternalRouteController.java:126)
>     at 
> org.apache.camel.impl.engine.DefaultRouteController.startRoute(DefaultRouteController.java:133)
>     ...
> Caused by: com.jcraft.jsch.JSchException: fromBase64: invalid base64 data
>     at com.jcraft.jsch.Util.fromBase64(Util.java:77)
>     at com.jcraft.jsch.KnownHosts.setKnownHosts(KnownHosts.java:257)
>     at com.jcraft.jsch.JSch.setKnownHosts(JSch.java:422)
>     at 
> org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:311)
>     at 
> org.apache.camel.component.file.remote.SftpOperations.tryConnect(SftpOperations.java:165)
>     at 
> org.apache.camel.support.task.BlockingTask.lambda$run$0(BlockingTask.java:45)
>     at 
> org.apache.camel.support.task.ForegroundTask.doRun(ForegroundTask.java:143)
>     at 
> org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:108)
>     at org.apache.camel.support.task.BlockingTask.run(BlockingTask.java:45)
>     at 
> org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:141)
>     ... 33 common frames omitted
> Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 26 out of bounds 
> for length 26
>     at com.jcraft.jsch.Util.fromBase64(Util.java:61)
>     ... 42 common frames omitted{noformat}
> If I convert my known hosts string into a byte array and pass that into the 
> builder it works.
>  
> 2. Private key specified as string causes OOM
> {noformat}
> java.lang.OutOfMemoryError: Java heap space
>         at com.jcraft.jsch.KeyPairRSA.parse(KeyPairRSA.java:350)
>         at com.jcraft.jsch.KeyPair.decrypt(KeyPair.java:943)
>         at com.jcraft.jsch.IdentityFile.setPassphrase(IdentityFile.java:59)
>         at com.jcraft.jsch.JSch.addIdentity(JSch.java:528)
>         at com.jcraft.jsch.JSch.addIdentity(JSch.java:511)
>         at 
> org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:257)
>         at 
> org.apache.camel.component.file.remote.SftpOperations.tryConnect(SftpOperations.java:165)
>         at 
> org.apache.camel.component.file.remote.SftpOperations$$Lambda/0x00007f2480edb398.test(Unknown
>  Source)
>         at 
> org.apache.camel.support.task.BlockingTask.lambda$run$0(BlockingTask.java:45)
>         at 
> org.apache.camel.support.task.BlockingTask$$Lambda/0x00007f2480edb5f0.getAsBoolean(Unknown
>  Source)
>         at 
> org.apache.camel.support.task.ForegroundTask.doRun(ForegroundTask.java:143)
>         at 
> org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:108)
>         at 
> org.apache.camel.support.task.BlockingTask.run(BlockingTask.java:45)
>         at 
> org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:141)
>         at 
> org.apache.camel.component.file.remote.RemoteFileConsumer.connectIfNecessary(RemoteFileConsumer.java:249)
>         at 
> org.apache.camel.component.file.remote.RemoteFileConsumer.prePollCheck(RemoteFileConsumer.java:79)
>         at 
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:134)
>         at 
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:113)
>         at 
> org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:208)
>         at 
> org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:119)
>         at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
>         at 
> java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
>         at 
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
>         at 
> org.apache.camel.impl.engine.MDCThreadFactoryListener.lambda$newThreadFactory$0(MDCThreadFactoryListener.java:53)
>         at 
> org.apache.camel.impl.engine.MDCThreadFactoryListener$$Lambda/0x00007f2480ee68c0.run(Unknown
>  Source)
>         at java.base/java.lang.Thread.runWith(Thread.java:1596)
>         at java.base/java.lang.Thread.run(Thread.java:1583){noformat}
> Again, If I convert my private key string into a byte array and pass that 
> into the builder it works.
>  
> I have debugged a bit and it seems like camel is removing the '+' characters 
> from the base64 data in the private key and in the known hosts before passing 
> them into JSch, causing these errors. Probably caused by some URI handling 
> internally?
> If I use the byte array it keeps them.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to