From 9fa2ece15b6389389782a56061a919d2a239540d Mon Sep 17 00:00:00 2001 From: David Crosson Date: Mon, 16 Jul 2018 17:52:06 +0200 Subject: [PATCH 1/1] Fix ssh adapter compilation issues. Apache sshd library updated to 2.0.0 Issue-ID: APPC-835 Change-Id: Idfbc396291c3d05a47e4dceb45d06bc8084c054d Signed-off-by: David Crosson --- .../appc-ssh-adapter/appc-ssh-adapter-sshd/pom.xml | 10 ++++ .../appc/adapter/ssh/sshd/SshConnectionSshd.java | 20 ++++---- .../onap/appc/adapter/ssh/sshd/SshAdapterTest.java | 60 +++++++++++----------- pom.xml | 12 ++++- 4 files changed, 63 insertions(+), 39 deletions(-) diff --git a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/pom.xml b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/pom.xml index 2c3f10e05..854e2d4ef 100644 --- a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/pom.xml +++ b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/pom.xml @@ -43,6 +43,16 @@ sshd-core provided + + org.apache.sshd + sshd-sftp + provided + + + org.apache.sshd + sshd-scp + provided + com.att.eelf eelf-core diff --git a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/main/java/org/onap/appc/adapter/ssh/sshd/SshConnectionSshd.java b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/main/java/org/onap/appc/adapter/ssh/sshd/SshConnectionSshd.java index 10d30191c..d54fe4355 100644 --- a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/main/java/org/onap/appc/adapter/ssh/sshd/SshConnectionSshd.java +++ b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/main/java/org/onap/appc/adapter/ssh/sshd/SshConnectionSshd.java @@ -23,26 +23,28 @@ package org.onap.appc.adapter.ssh.sshd; +import org.apache.sshd.client.channel.ClientChannelEvent; import org.onap.appc.adapter.ssh.Constants; import org.onap.appc.adapter.ssh.SshConnection; import org.onap.appc.adapter.ssh.SshException; import org.onap.appc.encryption.EncryptionTool; import org.onap.appc.configuration.Configuration; import org.onap.appc.configuration.ConfigurationFactory; -import org.apache.sshd.ClientChannel; -import org.apache.sshd.ClientSession; -import org.apache.sshd.SshClient; +import org.apache.sshd.client.session.ClientSession; +import org.apache.sshd.client.SshClient; import org.apache.sshd.client.channel.ChannelExec; import org.apache.sshd.client.future.AuthFuture; import org.apache.sshd.client.future.OpenFuture; -import org.apache.sshd.common.KeyPairProvider; +import org.apache.sshd.common.keyprovider.KeyPairProvider; import org.apache.sshd.common.keyprovider.FileKeyPairProvider; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import java.io.File; import java.io.OutputStream; import java.security.KeyPair; +import java.util.Arrays; /** * Implementation of SshConnection interface based on Apache MINA SSHD library. @@ -86,14 +88,14 @@ class SshConnectionSshd implements SshConnection { sshClient.start(); try { clientSession = - sshClient.connect(EncryptionTool.getInstance().decrypt(username), host, port).await().getSession(); + sshClient.connect(EncryptionTool.getInstance().decrypt(username), host, port).verify().getSession(); if (password != null) { clientSession.addPasswordIdentity(EncryptionTool.getInstance().decrypt(password)); } if (keyFile != null) { - KeyPairProvider keyPairProvider = new FileKeyPairProvider(new String[] { - keyFile - }); + KeyPairProvider keyPairProvider = new FileKeyPairProvider( + new File(keyFile).toPath() + ); KeyPair keyPair = keyPairProvider.loadKeys().iterator().next(); clientSession.addPublicKeyIdentity(keyPair); } @@ -183,7 +185,7 @@ class SshConnectionSshd implements SshConnection { OpenFuture openFuture = client.open(); int exitStatus; try { - client.waitFor(ClientChannel.CLOSED, timeout); + client.waitFor(Arrays.asList(ClientChannelEvent.CLOSED), timeout); openFuture.verify(); Integer exitStatusI = client.getExitStatus(); if (exitStatusI == null) { diff --git a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/test/java/org/onap/appc/adapter/ssh/sshd/SshAdapterTest.java b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/test/java/org/onap/appc/adapter/ssh/sshd/SshAdapterTest.java index 5fdbf5431..accc6c1a9 100644 --- a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/test/java/org/onap/appc/adapter/ssh/sshd/SshAdapterTest.java +++ b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-sshd/src/test/java/org/onap/appc/adapter/ssh/sshd/SshAdapterTest.java @@ -23,27 +23,27 @@ package org.onap.appc.adapter.ssh.sshd; -import org.apache.sshd.SshServer; +import org.apache.sshd.server.SshServer; +import org.apache.sshd.common.keyprovider.KeyPairProvider; import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.util.OsUtils; -import org.apache.sshd.server.Command; -import org.apache.sshd.server.CommandFactory; -import org.apache.sshd.server.PasswordAuthenticator; -import org.apache.sshd.server.PublickeyAuthenticator; -import org.apache.sshd.server.command.ScpCommandFactory; +import org.apache.sshd.server.command.Command; +import org.apache.sshd.server.auth.password.PasswordAuthenticator; +import org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; +import org.apache.sshd.server.scp.ScpCommandFactory; import org.apache.sshd.server.session.ServerSession; -import org.apache.sshd.server.sftp.SftpSubsystem; import org.apache.sshd.server.shell.ProcessShellFactory; +import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory; import org.hamcrest.CoreMatchers; import org.junit.*; import org.junit.rules.ExpectedException; import org.onap.appc.adapter.ssh.SshAdapter; import org.onap.appc.adapter.ssh.SshConnection; import org.onap.appc.adapter.ssh.SshException; -import org.onap.appc.adapter.ssh.sshd.SshAdapterSshd; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.BindException; @@ -51,6 +51,7 @@ import java.security.PublicKey; import java.util.Collections; import java.util.EnumSet; +//@Ignore public class SshAdapterTest { private static final boolean START_SERVER = true; @@ -162,42 +163,43 @@ public class SshAdapterTest { private void startServer() throws IOException { sshd = SshServer.setUpDefaultServer(); - sshd.setSubsystemFactories(Collections.>singletonList(new SftpSubsystem.Factory())); - sshd.setCommandFactory(new ScpCommandFactory(new CommandFactory() { + sshd.setSubsystemFactories(Collections.>singletonList(new SftpSubsystemFactory())); + sshd.setCommandFactory(new ScpCommandFactory() { public Command createCommand(String command) { - EnumSet ttyOptions; - if (OsUtils.isUNIX()) { - ttyOptions = EnumSet.of(ProcessShellFactory.TtyOptions.ONlCr); - } else { - ttyOptions = EnumSet.of(ProcessShellFactory.TtyOptions.Echo, ProcessShellFactory.TtyOptions.ICrNl, ProcessShellFactory.TtyOptions.ONlCr); - } - return new ProcessShellFactory(command.split(" "), ttyOptions).create(); + //EnumSet ttyOptions; + //if (OsUtils.isUNIX()) { + // ttyOptions = EnumSet.of(ProcessShellFactory.TtyOptions.ONlCr); + //} else { + // ttyOptions = EnumSet.of(ProcessShellFactory.TtyOptions.Echo, ProcessShellFactory.TtyOptions.ICrNl, ProcessShellFactory.TtyOptions.ONlCr); + //} + //return new ProcessShellFactory(command.split(" "), ttyOptions).create(); + + return new ProcessShellFactory(command.split(" ")).create(); } - })); + }); if (OsUtils.isUNIX()) { - sshd.setShellFactory(new ProcessShellFactory(new String[]{"/bin/sh", "-i", "-l"}, - EnumSet.of(ProcessShellFactory.TtyOptions.ONlCr))); + sshd.setShellFactory(new ProcessShellFactory(new String[]{"/bin/sh", "-i", "-l"}/*, + EnumSet.of(ProcessShellFactory.TtyOptions.ONlCr)*/)); } else { - sshd.setShellFactory(new ProcessShellFactory(new String[]{"cmd.exe "}, - EnumSet.of(ProcessShellFactory.TtyOptions.Echo, ProcessShellFactory.TtyOptions.ICrNl, ProcessShellFactory.TtyOptions.ONlCr))); + sshd.setShellFactory(new ProcessShellFactory(new String[]{"cmd.exe "}/*, + EnumSet.of(ProcessShellFactory.TtyOptions.Echo, ProcessShellFactory.TtyOptions.ICrNl, ProcessShellFactory.TtyOptions.ONlCr)*/)); } // if(SecurityUtils.isBouncyCastleRegistered()) { // sshd.setKeyPairProvider(new PEMGeneratorHostKeyProvider(System.getProperty("java.io.tmpdir") + "/key.pem")); // } else { - sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(System.getProperty("java.io.tmpdir") + "/key.ser")); + sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File(System.getProperty("java.io.tmpdir") + "/key.ser"))); // } sshd.setPasswordAuthenticator(new PasswordAuthenticator() { - @Override public boolean authenticate(String username, String password, ServerSession session) { return (SSH_USERNAME.equals(username) && SSH_PASSWORD.equals(password)); } }); sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() { - + // We're testing access using passwords, so do not authorize authentitication using public keys public boolean authenticate(String username, PublicKey key, ServerSession session) { - return true; + return false; } }); sshd.getProperties().put(SshServer.WELCOME_BANNER, "Welcome to SSHD\n"); @@ -236,11 +238,11 @@ public class SshAdapterTest { private void stopServer() { try { if (sshd != null) { - sshd.stop(true); + sshd.stop(); System.out.println("SSH server stopped on port [" + sshPort + "]. [" + getClass().getName() + "#" + System.identityHashCode(this) + "]"); } - } catch (InterruptedException e) { - System.err.println("=> Error stopping SSH server."); + } catch (IOException e) { + System.err.println("=> IO Error stopping SSH server."); e.printStackTrace(); } finally { sshd = null; diff --git a/pom.xml b/pom.xml index 6235571f3..340a430aa 100644 --- a/pom.xml +++ b/pom.xml @@ -404,7 +404,17 @@ limitations under the License. org.apache.sshd sshd-core - 0.12.0 + 2.0.0 + + + org.apache.sshd + sshd-sftp + 2.0.0 + + + org.apache.sshd + sshd-scp + 2.0.0 org.mockito -- 2.16.6