I am using Apache camel FTP and AWS module (v2.18 ) to create a route between SFTP and AWS S3. Connection to SFTP location is established via ssh jump-host.
Able to connect via Unix command : sftp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /path/to/host/private-key-file -o 'ProxyCommand=ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /path/to/jumphost/private-key-file -l jumphostuser jump.host.com nc sftp.host.com 22' sftp-u...@sftp.host.com However I am getting error while connecting using Apache camel : Cannot connect/login to: sftp://sftp-u...@sftp.host.com:22 For testing purposes I tried connecting to SFTP using Spring -Integration and I was able to do it successfully using the same proxy implementation (JumpHostProxyCommand) mentioned below. Below is the Spring boot + Apache Camel code that I have been using: Jsch proxy : import com.jcraft.jsch.*; class JumpHostProxyCommand implements Proxy { String command; Process p = null; InputStream in = null; OutputStream out = null; public JumpHostProxyCommand(String command) { this.command = command; } public void connect(SocketFactory socket_factory, String host, int port, int timeout) throws Exception { String cmd = command.replace("%h", host); cmd = cmd.replace("%p", new Integer(port).toString()); p = Runtime.getRuntime().exec(cmd); log.debug("Process returned by proxy command {} , {}", command, p); in = p.getInputStream(); log.debug("Input stream returned by proxy {}", in); out = p.getOutputStream(); log.debug("Output stream returned by proxy {}", out); } public Socket getSocket() { return null; } public InputStream getInputStream() { return in; } public OutputStream getOutputStream() { return out; } public void close() { try { if (p != null) { p.getErrorStream().close(); p.getOutputStream().close(); p.getInputStream().close(); p.destroy(); p = null; } } catch (IOException e) { e.printStackTrace(); } } } Spring boot camel Configuration : @Configuration public class CamelConfig { @Autowired DataSource dataSource; @Bean(name = "jdbcMsgIdRepo") public JdbcMessageIdRepository JdbcMessageIdRepository() { return new JdbcMessageIdRepository(dataSource,"jdbc-repo"); } @Bean(name = "s3Client") public AmazonS3 s3Client() { return new AmazonS3Client(); } @Bean(name="jumpHostProxyCommand") JumpHostProxyCommand jumpHostProxyCommand() { String proxykeyFilePath = "/path/to/jumphost/private-key-file"; String command = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /proxy/host/key/path -l jumphostuser jump.host.com nc %h %p"; log.debug("JumpHostProxyCommand : " + command); return new JumpHostProxyCommand(command); } } build.gradle file: task wrapper(type: Wrapper) { gradleVersion = '2.5' } ext { springBootVersion = "1.4.1.RELEASE" awsJavaSdkVersion = "1.10.36" postgresVersion = "11.2.0.3.0" jacksonVersion = "2.8.4" sl4jVersion = "1.7.21" junitVersion = "4.12" camelVersion ="2.18.0" } buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE") } } repositories { mavenCentral() } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'spring-boot' sourceCompatibility = 1.8 targetCompatibility = 1.8 springBoot { executable = true } dependencies { //logging compile("ch.qos.logback:logback-classic:1.1.3") compile("ch.qos.logback:logback-core:1.1.3") compile("org.slf4j:slf4j-api:$sl4jVersion") //Spring boot compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion") compile("org.springframework.boot:spring-boot-starter-jdbc:$springBootVersion") compile("org.apache.camel:camel-spring-boot-starter:$camelVersion") //Jdbc compile("postgresql:postgresql:9.0-801.jdbc4") //Camel compile("org.apache.camel:camel-ftp:$camelVersion") compile("org.apache.camel:camel-aws:$camelVersion") compile("org.apache.camel:camel-core:$camelVersion") compile("org.apache.camel:camel-spring-boot:$camelVersion") compile("org.apache.camel:camel-sql:$camelVersion") //Aws sdk compile("com.amazonaws:aws-java-sdk:$awsJavaSdkVersion") //Json compile("com.fasterxml.jackson.core:jackson-core:$jacksonVersion") compile("com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion") compile("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion") //Swagger compile("io.springfox:springfox-swagger2:2.0.2") compile("io.springfox:springfox-swagger-ui:2.0.2") //utilities compile('org.projectlombok:lombok:1.16.6') compile("org.apache.commons:commons-collections4:4.1") compile("org.apache.commons:commons-lang3:3.4") //Junit testCompile("junit:junit:$junitVersion") testCompile("org.springframework.boot:spring-boot-starter-test:$springBootVersion") testCompile("org.mockito:mockito-all:1.10.19") } I have been struggling for last 2 days to find out the root cause of the error, any help on this issue is really appreciated. Thanks! -- View this message in context: http://camel.465427.n5.nabble.com/Not-able-to-connect-to-SFTP-via-jumhost-using-Apache-camel-tp5790282.html Sent from the Camel Development mailing list archive at Nabble.com.