You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jg...@apache.org on 2014/07/26 03:52:30 UTC
[48/50] git commit: [KARAF-3059] Add -k option to bin/client to
specify a key file [KARAF-3140] Upgrade to sshd 0.12.0
[KARAF-3059] Add -k option to bin/client to specify a key file
[KARAF-3140] Upgrade to sshd 0.12.0
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/06043e37
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/06043e37
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/06043e37
Branch: refs/remotes/karaf-2.3.x
Commit: 06043e37b2cffb5b56e737fe044de451b32f7d38
Parents: 7dc1f81
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Fri Jul 25 21:45:15 2014 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Fri Jul 25 21:45:15 2014 +0200
----------------------------------------------------------------------
.../main/java/org/apache/karaf/client/Main.java | 27 +++++++--
pom.xml | 2 +-
.../karaf/shell/ssh/KarafAgentFactory.java | 11 ++--
.../karaf/shell/ssh/KarafFileSystemFactory.java | 14 ++++-
.../karaf/shell/ssh/KarafFileSystemView.java | 61 --------------------
.../apache/karaf/shell/ssh/KarafSshFile.java | 37 ------------
6 files changed, 40 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/client/src/main/java/org/apache/karaf/client/Main.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/karaf/client/Main.java b/client/src/main/java/org/apache/karaf/client/Main.java
index bb7ee85..1f6b3b4 100644
--- a/client/src/main/java/org/apache/karaf/client/Main.java
+++ b/client/src/main/java/org/apache/karaf/client/Main.java
@@ -35,6 +35,7 @@ import org.apache.sshd.agent.local.LocalAgentFactory;
import org.apache.sshd.client.channel.ChannelShell;
import org.apache.sshd.client.future.ConnectFuture;
import org.apache.sshd.common.RuntimeSshException;
+import org.apache.sshd.common.keyprovider.FileKeyPairProvider;
import org.fusesource.jansi.AnsiConsole;
import org.slf4j.impl.SimpleLogger;
@@ -54,6 +55,7 @@ public class Main {
int retryDelay = 2;
boolean batch = false;
String file = null;
+ String keyFile = null;
for (int i = 0; i < args.length; i++) {
if (args[i].charAt(0) == '-') {
@@ -75,6 +77,8 @@ public class Main {
batch = true;
} else if (args[i].equals("-f")) {
file = args[++i];
+ } else if (args[i].equals("-k")) {
+ keyFile = args[++i];
} else if (args[i].equals("--help")) {
System.out.println("Apache Karaf client");
System.out.println(" -a [port] specify the port to connect to");
@@ -87,7 +91,8 @@ public class Main {
System.out.println(" -r [attempts] retry connection establishment (up to attempts times)");
System.out.println(" -d [delay] intra-retry delay (defaults to 2 seconds)");
System.out.println(" -b batch mode, specify multiple commands via standard input");
- System.out.println(" -f [file] read commands from the specified file");
+ System.out.println(" -f [file] read commands from the specified file");
+ System.out.println(" -k [keyFile] specify the private keyFile location when using key login, need have BouncyCastle registered as security provider using this flag");
System.out.println(" [commands] commands to run");
System.out.println("If no commands are specified, the client will be put in an interactive mode");
System.exit(0);
@@ -127,7 +132,7 @@ public class Main {
SshAgent agent = null;
int exitStatus = 0;
try {
- agent = startAgent(user);
+ agent = startAgent(user, keyFile);
client = SshClient.setUpDefaultClient();
client.setAgentFactory(new LocalAgentFactory(agent));
client.getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, "local");
@@ -211,14 +216,24 @@ public class Main {
System.exit(exitStatus);
}
- protected static SshAgent startAgent(String user) {
+ protected static SshAgent startAgent(String user, String keyFile) {
try {
SshAgent local = new AgentImpl();
- URL url = Main.class.getClassLoader().getResource("karaf.key");
- InputStream is = url.openStream();
+
+ URL builtInPrivateKey = Main.class.getClassLoader().getResource("karaf.key");
+ InputStream is = builtInPrivateKey.openStream();
ObjectInputStream r = new ObjectInputStream(is);
KeyPair keyPair = (KeyPair) r.readObject();
- local.addIdentity(keyPair, "karaf");
+ is.close();
+ local.addIdentity(keyPair, user);
+
+ if (keyFile != null) {
+ String[] keyFiles = new String[]{ keyFile };
+ FileKeyPairProvider fileKeyPairProvider = new FileKeyPairProvider(keyFiles);
+ for (KeyPair key : fileKeyPairProvider.loadKeys()) {
+ local.addIdentity(key, user);
+ }
+ }
return local;
} catch (Throwable e) {
System.err.println("Error starting ssh agent for: " + e.getMessage());
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 75ec479..e1968cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -220,7 +220,7 @@
<spring40.version>4.0.5.RELEASE_1</spring40.version>
<spring.security31.version>3.1.4.RELEASE</spring.security31.version>
- <sshd.version>0.8.0</sshd.version>
+ <sshd.version>0.12.0</sshd.version>
<directory-version>2.0.0-M16</directory-version>
<struts.bundle.version>1.3.10_1</struts.bundle.version>
<weld.version>2.1.1.Final</weld.version>
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
index e814000..3543484 100644
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
+++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
@@ -29,8 +29,10 @@ import org.apache.sshd.agent.common.AgentDelegate;
import org.apache.sshd.agent.local.AgentServerProxy;
import org.apache.sshd.agent.local.ChannelAgentForwarding;
import org.apache.sshd.common.Channel;
+import org.apache.sshd.common.FactoryManager;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.Session;
+import org.apache.sshd.common.session.ConnectionService;
import org.apache.sshd.server.session.ServerSession;
public class KarafAgentFactory implements SshAgentFactory {
@@ -42,8 +44,8 @@ public class KarafAgentFactory implements SshAgentFactory {
return new ChannelAgentForwarding.Factory();
}
- public SshAgent createClient(Session session) throws IOException {
- String proxyId = session.getFactoryManager().getProperties().get(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
+ public SshAgent createClient(FactoryManager manager) throws IOException {
+ String proxyId = manager.getProperties().get(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
if (proxyId == null) {
throw new IllegalStateException("No " + SshAgent.SSH_AUTHSOCKET_ENV_NAME + " environment variable set");
}
@@ -58,11 +60,12 @@ public class KarafAgentFactory implements SshAgentFactory {
throw new IllegalStateException("No ssh agent found");
}
- public SshAgentServer createServer(Session session) throws IOException {
+ public SshAgentServer createServer(ConnectionService service) throws IOException {
+ Session session = service.getSession();
if (!(session instanceof ServerSession)) {
throw new IllegalStateException("The session used to create an agent server proxy must be a server session");
}
- final AgentServerProxy proxy = new AgentServerProxy((ServerSession) session);
+ final AgentServerProxy proxy = new AgentServerProxy(service);
proxies.put(proxy.getId(), proxy);
return new SshAgentServer() {
public String getId() {
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
index d728ec5..3374575 100644
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
+++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
@@ -19,8 +19,13 @@
package org.apache.karaf.shell.ssh;
import org.apache.sshd.common.Session;
-import org.apache.sshd.server.FileSystemFactory;
-import org.apache.sshd.server.FileSystemView;
+import org.apache.sshd.common.file.FileSystemFactory;
+import org.apache.sshd.common.file.FileSystemView;
+import org.apache.sshd.common.file.nativefs.NativeFileSystemView;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
/**
* SSHd file system factory to reduce the visibility to the KARAF_BASE.
@@ -28,7 +33,10 @@ import org.apache.sshd.server.FileSystemView;
public class KarafFileSystemFactory implements FileSystemFactory {
public FileSystemView createFileSystemView(Session session) {
- return new KarafFileSystemView();
+ Map<String, String> roots = new HashMap<String, String>();
+ String dir = new File(System.getProperty("karaf.base")).getAbsolutePath();
+ roots.put("/", dir);
+ return new NativeFileSystemView(session.getUsername(), roots, "/");
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
deleted file mode 100644
index 33b64fe..0000000
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.server.FileSystemView;
-import org.apache.sshd.server.SshFile;
-import org.apache.sshd.server.filesystem.NativeSshFile;
-
-import java.io.File;
-
-/**
- * Karaf file system view reduced to the KARAF_BASE location
- */
-public class KarafFileSystemView implements FileSystemView {
-
- private String location;
-
- public KarafFileSystemView() {
- location = System.getProperty("karaf.base");
- }
-
- public SshFile getFile(String file) {
- return getFile(location, file);
- }
-
- public SshFile getFile(SshFile baseDir, String file) {
- return getFile(baseDir.getAbsolutePath(), file);
- }
-
- protected SshFile getFile(String dir, String file) {
- // get actual file object
- String physicalName = NativeSshFile.getPhysicalName("/", dir, file, false);
-
- if (!physicalName.startsWith(location)) {
- throw new IllegalArgumentException("The path is not relative to KARAF_BASE. For security reason, it's not allowed.");
- }
-
- File fileObj = new File(physicalName);
-
- // strip the root directory and return
- String karafFileName = physicalName.substring("/".length() - 1);
- return new KarafSshFile(karafFileName, fileObj);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/karaf/blob/06043e37/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
deleted file mode 100644
index fed7c91..0000000
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafSshFile.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.karaf.shell.ssh;
-
-import org.apache.sshd.server.filesystem.NativeSshFile;
-
-import java.io.File;
-
-/**
- * Karaf ssh file support.
- */
-public class KarafSshFile extends NativeSshFile {
-
- /**
- * Constructor, internal do not use directly.
- */
- public KarafSshFile(String fileName, final File file) {
- super(fileName, file, null);
- }
-
-}
\ No newline at end of file