From feb5b850ff08a38eb9e6bf1eefc16cafaaa78148 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 18 Jul 2019 00:23:38 +0300 Subject: [PATCH 1/3] sftp file transfer --- core-java-modules/core-java-io/pom.xml | 24 +++- .../io/remote/SftpFileTransferLiveTest.java | 106 ++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index 44c703ee68..e263512512 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -171,6 +171,24 @@ jmimemagic ${jmime-magic.version} + + + com.jcraft + jsch + ${jsch.version} + + + com.hierynomus + sshj + ${sshj.version} + + + org.apache.commons + commons-vfs2 + ${vfs.version} + + + @@ -249,7 +267,7 @@ 3.5 - 1.55 + 1.60 1.10 3.6.1 1.0.3 @@ -262,6 +280,10 @@ 0.6.5 0.9.0 4.1 + + 0.1.55 + 0.27.0 + 2.3 3.6.1 1.7.0 diff --git a/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java b/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java new file mode 100644 index 0000000000..192153bc90 --- /dev/null +++ b/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java @@ -0,0 +1,106 @@ +package org.baeldung.java.io.remote; + +import java.io.IOException; + +import org.apache.commons.vfs2.FileObject; +import org.apache.commons.vfs2.FileSystemManager; +import org.apache.commons.vfs2.Selectors; +import org.apache.commons.vfs2.VFS; +import org.junit.Test; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import com.jcraft.jsch.SftpException; + +import net.schmizz.sshj.SSHClient; +import net.schmizz.sshj.sftp.SFTPClient; +import net.schmizz.sshj.transport.verification.PromiscuousVerifier; + +public class SftpFileTransferLiveTest { + + private String remoteHost = "HOST_NAME_HERE"; + private String username = "USERNAME_HERE"; + private String password = "PASSWORD_HERE"; + private String localFile = "src/main/resources/input.txt"; + private String remoteFile = "welcome.txt"; + private String localDir = "src/main/resources/"; + private String remoteDir = "remote_sftp_test/"; + private String knownHostsFileLoc = "/Users/USERNAME/known_hosts_sample"; + + @Test + public void whenUploadFileUsingJsch_thenSuccess() throws JSchException, SftpException { + ChannelSftp channelSftp = setupJsch(); + channelSftp.connect(); + channelSftp.put(localFile, remoteDir + "jschFile.txt"); + channelSftp.exit(); + } + + @Test + public void whenDownloadFileUsingJsch_thenSuccess() throws JSchException, SftpException { + ChannelSftp channelSftp = setupJsch(); + channelSftp.connect(); + channelSftp.get(remoteFile, localDir + "jschFile.txt"); + channelSftp.exit(); + } + + @Test + public void whenUploadFileUsingSshj_thenSuccess() throws IOException { + SSHClient sshClient = setupSshj(); + SFTPClient sftpClient = sshClient.newSFTPClient(); + sftpClient.put(localFile, remoteDir + "sshjFile.txt"); + sftpClient.close(); + sshClient.disconnect(); + } + + @Test + public void whenDownloadFileUsingSshj_thenSuccess() throws IOException { + SSHClient sshClient = setupSshj(); + SFTPClient sftpClient = sshClient.newSFTPClient(); + sftpClient.get(remoteFile, localDir + "sshjFile.txt"); + sftpClient.close(); + sshClient.disconnect(); + } + + @Test + public void whenUploadFileUsingApacheVfs_thenSuccess() throws IOException { + FileSystemManager manager = VFS.getManager(); + FileObject local = manager.resolveFile(System.getProperty("user.dir") + "/" + localFile); + FileObject remote = manager.resolveFile("sftp://" + username + ":" + password + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt"); + remote.copyFrom(local, Selectors.SELECT_SELF); + local.close(); + remote.close(); + } + + @Test + public void whenDownloadFileUsingApacheVfs_thenSuccess() throws IOException { + FileSystemManager manager = VFS.getManager(); + FileObject local = manager.resolveFile(System.getProperty("user.dir") + "/" + localDir + "vfsFile.txt"); + FileObject remote = manager.resolveFile("sftp://" + username + ":" + password + "@" + remoteHost + "/" + remoteFile); + local.copyFrom(remote, Selectors.SELECT_SELF); + local.close(); + remote.close(); + } + + // ====== ssh-keyscan -H -t rsa remoteHost >> known_hosts_sample + + private ChannelSftp setupJsch() throws JSchException { + JSch jsch = new JSch(); + jsch.setKnownHosts(knownHostsFileLoc); + Session jschSession = jsch.getSession(username, remoteHost); + jschSession.setPassword(password); + //jschSession.setConfig("StrictHostKeyChecking", "no"); + jschSession.connect(); + return (ChannelSftp) jschSession.openChannel("sftp"); + } + + private SSHClient setupSshj() throws IOException { + SSHClient client = new SSHClient(); + client.addHostKeyVerifier(new PromiscuousVerifier()); + client.connect(remoteHost); + client.authPassword(username, password); + return client; + } + +} From cd88156b5c9a50cf0e93f80384239bbea3347533 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 18 Jul 2019 20:17:01 +0300 Subject: [PATCH 2/3] create module libraries-io --- core-java-modules/core-java-io/pom.xml | 26 +----------- libraries-io/README.md | 4 ++ libraries-io/pom.xml | 40 +++++++++++++++++++ libraries-io/src/main/resources/input.txt | 1 + .../io/remote/SftpFileTransferLiveTest.java | 0 pom.xml | 1 + 6 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 libraries-io/README.md create mode 100644 libraries-io/pom.xml create mode 100644 libraries-io/src/main/resources/input.txt rename {core-java-modules/core-java-io => libraries-io}/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java (100%) diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index d12b10d34e..75e820c95b 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -170,25 +170,7 @@ net.sf.jmimemagic jmimemagic ${jmime-magic.version} - - - - com.jcraft - jsch - ${jsch.version} - - - com.hierynomus - sshj - ${sshj.version} - - - org.apache.commons - commons-vfs2 - ${vfs.version} - - - + @@ -278,11 +260,7 @@ 1.13 0.6.5 0.9.0 - 4.1 - - 0.1.55 - 0.27.0 - 2.4 + 4.1 3.6.1 1.7.0 diff --git a/libraries-io/README.md b/libraries-io/README.md new file mode 100644 index 0000000000..f8ea2f1be8 --- /dev/null +++ b/libraries-io/README.md @@ -0,0 +1,4 @@ + +### Relevant Articles: + + diff --git a/libraries-io/pom.xml b/libraries-io/pom.xml new file mode 100644 index 0000000000..5b78ae9442 --- /dev/null +++ b/libraries-io/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + libraries-io + libraries-io + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + + com.jcraft + jsch + ${jsch.version} + + + com.hierynomus + sshj + ${sshj.version} + + + org.apache.commons + commons-vfs2 + ${vfs.version} + + + + + + 0.1.55 + 0.27.0 + 2.4 + + diff --git a/libraries-io/src/main/resources/input.txt b/libraries-io/src/main/resources/input.txt new file mode 100644 index 0000000000..a10db923e5 --- /dev/null +++ b/libraries-io/src/main/resources/input.txt @@ -0,0 +1 @@ +This is a sample text content \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java b/libraries-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java similarity index 100% rename from core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java rename to libraries-io/src/test/java/org/baeldung/java/io/remote/SftpFileTransferLiveTest.java diff --git a/pom.xml b/pom.xml index 3fd1bcf5fb..e522689890 100644 --- a/pom.xml +++ b/pom.xml @@ -506,6 +506,7 @@ libraries-security libraries-server libraries-http + libraries-io linkrest logging-modules lombok From 631817cc3e60032cb75db55fd5ddd39e45fe67e8 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 18 Jul 2019 20:22:53 +0300 Subject: [PATCH 3/3] minor cleanup --- core-java-modules/core-java-io/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index 75e820c95b..1a133d2cbe 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -170,7 +170,7 @@ net.sf.jmimemagic jmimemagic ${jmime-magic.version} - + @@ -260,7 +260,7 @@ 1.13 0.6.5 0.9.0 - 4.1 + 4.1 3.6.1 1.7.0