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);

Reply via email to