Repository: karaf Updated Branches: refs/heads/master d00f282b6 -> 8074e3212
Create key on demand again to see if it fixes the itest issues Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/8074e321 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/8074e321 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/8074e321 Branch: refs/heads/master Commit: 8074e32124a77809670f76ce0bd54222e25a163a Parents: d00f282 Author: Christian Schneider <ch...@die-schneider.net> Authored: Sat Aug 5 10:44:19 2017 +0200 Committer: Christian Schneider <ch...@die-schneider.net> Committed: Sat Aug 5 10:44:19 2017 +0200 ---------------------------------------------------------------------- .../apache/karaf/itests/KarafTestSupport.java | 2 +- .../org/apache/karaf/shell/ssh/Activator.java | 26 +++----------------- .../keygenerator/OpenSSHKeyPairProvider.java | 23 +++++++++++++++-- .../OpenSSHGeneratorKeyFileProviderTest.java | 2 +- 4 files changed, 26 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/8074e321/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java ---------------------------------------------------------------------- diff --git a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java index 5831015..17413bd 100644 --- a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java +++ b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java @@ -203,7 +203,7 @@ public class KarafTestSupport { mavenBundle().groupId("org.awaitility").artifactId("awaitility").versionAsInProject(), mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(), replaceConfigurationFile("etc/org.ops4j.pax.logging.cfg", getConfigFile("/etc/org.ops4j.pax.logging.cfg")), - replaceConfigurationFile("etc/host.key", getConfigFile("/etc/host.key")), + //replaceConfigurationFile("etc/host.key", getConfigFile("/etc/host.key")), editConfigurationFilePut("etc/org.apache.karaf.features.cfg", "updateSnapshots", "none"), editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", httpPort), editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", rmiRegistryPort), http://git-wip-us.apache.org/repos/asf/karaf/blob/8074e321/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java index 584771f..0ffbbba 100644 --- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java +++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java @@ -18,22 +18,16 @@ */ package org.apache.karaf.shell.ssh; -import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.security.KeyPair; import java.util.Collections; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import org.apache.karaf.shell.api.action.lifecycle.Manager; import org.apache.karaf.shell.api.console.CommandLoggingFilter; import org.apache.karaf.shell.api.console.Session; import org.apache.karaf.shell.api.console.SessionFactory; -import org.apache.karaf.shell.ssh.keygenerator.OpenSSHKeyPairGenerator; import org.apache.karaf.shell.ssh.keygenerator.OpenSSHKeyPairProvider; -import org.apache.karaf.shell.ssh.keygenerator.PemWriter; import org.apache.karaf.shell.support.RegexCommandLoggingFilter; import org.apache.karaf.util.tracker.BaseActivator; import org.apache.karaf.util.tracker.annotation.Managed; @@ -65,7 +59,6 @@ public class Activator extends BaseActivator implements ManagedService { ServiceTracker<Session, Session> sessionTracker; SessionFactory sessionFactory; SshServer server; - ExecutorService executor = Executors.newSingleThreadExecutor(); @Override protected void doOpen() throws Exception { @@ -113,8 +106,7 @@ public class Activator extends BaseActivator implements ManagedService { sessionFactory = sf; sessionFactory.getRegistry().getService(Manager.class).register(SshAction.class); if (Boolean.parseBoolean(bundleContext.getProperty("karaf.startRemoteShell"))) { - // Start server in background as key generation might take some time - executor.submit(() -> createAndRunSshServer()); + createAndRunSshServer(); } } @@ -165,11 +157,7 @@ public class Activator extends BaseActivator implements ManagedService { String moduliUrl = getString("moduli-url", null); Path serverKeyPath = Paths.get(hostKey); - if (!serverKeyPath.toFile().exists()) { - createServerKey(serverKeyPath.toFile(), algorithm, keySize); - } - - KeyPairProvider keyPairProvider = new OpenSSHKeyPairProvider(serverKeyPath.toFile()); + KeyPairProvider keyPairProvider = new OpenSSHKeyPairProvider(serverKeyPath.toFile(), algorithm, keySize); KarafJaasAuthenticator authenticator = new KarafJaasAuthenticator(sshRealm); UserAuthFactoriesFactory authFactoriesFactory = new UserAuthFactoriesFactory(); authFactoriesFactory.setAuthMethods(authMethods); @@ -201,14 +189,6 @@ public class Activator extends BaseActivator implements ManagedService { return server; } - private void createServerKey(File keyFile, String algorithm, int keySize) { - try { - logger.info("Creating ssh server key at " + keyFile); - KeyPair kp = new OpenSSHKeyPairGenerator(algorithm, keySize).generate(); - new PemWriter(keyFile).writeKeyPair(algorithm, kp); - } catch (Exception e) { - throw new RuntimeException("Key file generation failed", e); - } - } + } http://git-wip-us.apache.org/repos/asf/karaf/blob/8074e321/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHKeyPairProvider.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHKeyPairProvider.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHKeyPairProvider.java index df3e025..78a458d 100644 --- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHKeyPairProvider.java +++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHKeyPairProvider.java @@ -28,21 +28,31 @@ import java.security.KeyPair; import org.apache.commons.ssl.PKCS8Key; import org.apache.sshd.common.keyprovider.AbstractKeyPairProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class OpenSSHKeyPairProvider extends AbstractKeyPairProvider { + private static final Logger LOGGER = LoggerFactory.getLogger(OpenSSHKeyPairProvider.class); private File keyFile; private String password; private KeyPair cachedKey; + private String algorithm; + private int keySize; - public OpenSSHKeyPairProvider(File keyFile) { + public OpenSSHKeyPairProvider(File keyFile, String algorithm, int keySize) { this.keyFile = keyFile; + this.algorithm = algorithm; + this.keySize = keySize; } @Override - public Iterable<KeyPair> loadKeys() { + public synchronized Iterable<KeyPair> loadKeys() { if (cachedKey != null) { return singleton(cachedKey); } + if (!keyFile.exists()) { + createServerKey(); + } try (FileInputStream is = new FileInputStream(keyFile)) { KeyPair kp = getKeyPair(is); cachedKey = kp; @@ -58,4 +68,13 @@ public class OpenSSHKeyPairProvider extends AbstractKeyPairProvider { return kp; } + private void createServerKey() { + try { + LOGGER.info("Creating ssh server key at " + keyFile); + KeyPair kp = new OpenSSHKeyPairGenerator(algorithm, keySize).generate(); + new PemWriter(keyFile).writeKeyPair(algorithm, kp); + } catch (Exception e) { + throw new RuntimeException("Key file generation failed", e); + } + } } http://git-wip-us.apache.org/repos/asf/karaf/blob/8074e321/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHGeneratorKeyFileProviderTest.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHGeneratorKeyFileProviderTest.java b/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHGeneratorKeyFileProviderTest.java index 891b042..ef02e98 100644 --- a/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHGeneratorKeyFileProviderTest.java +++ b/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/keygenerator/OpenSSHGeneratorKeyFileProviderTest.java @@ -37,7 +37,7 @@ public class OpenSSHGeneratorKeyFileProviderTest { new PemWriter(temp).writeKeyPair(KeyUtils.RSA_ALGORITHM, kp); //File path = new File("/home/cschneider/.ssh/id_rsa"); - OpenSSHKeyPairProvider prov = new OpenSSHKeyPairProvider(temp); + OpenSSHKeyPairProvider prov = new OpenSSHKeyPairProvider(temp, KeyUtils.RSA_ALGORITHM, 1024); KeyPair keys = prov.loadKeys().iterator().next(); Assert.assertNotNull(keys); Assert.assertTrue("Loaded key is not RSA Key", keys.getPrivate() instanceof RSAPrivateCrtKey);