[SSHD-382] Add support for custom properties on the command line for client and server
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/71ad6a07 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/71ad6a07 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/71ad6a07 Branch: refs/heads/master Commit: 71ad6a07607ce1178ef913b3d3f3040114603617 Parents: 24a5f7d Author: Guillaume Nodet <[email protected]> Authored: Fri Dec 12 10:48:27 2014 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Fri Dec 12 10:48:27 2014 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/sshd/SshClient.java | 20 +++++++++++++++++++- .../main/java/org/apache/sshd/SshServer.java | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/71ad6a07/sshd-core/src/main/java/org/apache/sshd/SshClient.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/SshClient.java b/sshd-core/src/main/java/org/apache/sshd/SshClient.java index 461b8ca..ef34288 100644 --- a/sshd-core/src/main/java/org/apache/sshd/SshClient.java +++ b/sshd-core/src/main/java/org/apache/sshd/SshClient.java @@ -33,7 +33,9 @@ import java.net.SocketAddress; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.Callable; import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; @@ -374,6 +376,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa int socksPort = -1; boolean error = false; List<String> identities = new ArrayList<String>(); + Map<String, String> options = new LinkedHashMap<String, String>(); for (int i = 0; i < args.length; i++) { if (command == null && "-p".equals(args[i])) { @@ -414,6 +417,20 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa break; } identities.add(args[++i]); + } else if (command == null && "-o".equals(args[i])) { + if (i + 1 >= args.length) { + System.err.println("option requires and argument: " + args[i]); + error = true; + break; + } + String opt = args[++i]; + int idx = opt.indexOf('='); + if (idx <= 0) { + System.err.println("bad syntax for option: " + opt); + error = true; + break; + } + options.put(opt.substring(0, idx), opt.substring(idx + 1)); } else if (command == null && args[i].startsWith("-")) { System.err.println("illegal option: " + args[i]); error = true; @@ -434,7 +451,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa error = true; } if (error) { - System.err.println("usage: ssh [-A|-a] [-v[v][v]] [-D socksPort] [-l login] [-p port] hostname [command]"); + System.err.println("usage: ssh [-A|-a] [-v[v][v]] [-D socksPort] [-l login] [-p port] [-o option=value] hostname [command]"); System.exit(-1); } if (logLevel <= 0) { @@ -486,6 +503,7 @@ public class SshClient extends AbstractFactoryManager implements ClientFactoryMa } SshClient client = SshClient.setUpDefaultClient(); + client.getProperties().putAll(options); client.start(); client.setKeyPairProvider(provider); client.setUserInteraction(new UserInteraction() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/71ad6a07/sshd-core/src/main/java/org/apache/sshd/SshServer.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/SshServer.java b/sshd-core/src/main/java/org/apache/sshd/SshServer.java index 2424df4..d29ef9e 100644 --- a/sshd-core/src/main/java/org/apache/sshd/SshServer.java +++ b/sshd-core/src/main/java/org/apache/sshd/SshServer.java @@ -25,7 +25,9 @@ import java.security.PublicKey; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import org.apache.sshd.common.AbstractFactoryManager; import org.apache.sshd.common.Closeable; @@ -372,6 +374,7 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa int port = 8000; String provider; boolean error = false; + Map<String, String> options = new LinkedHashMap<String, String>(); for (int i = 0; i < args.length; i++) { if ("-p".equals(args[i])) { @@ -394,6 +397,20 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa System.err.println("provider should be mina or nio2: " + args[i]); break; } + } else if ("-o".equals(args[i])) { + if (i + 1 >= args.length) { + System.err.println("option requires and argument: " + args[i]); + error = true; + break; + } + String opt = args[++i]; + int idx = opt.indexOf('='); + if (idx <= 0) { + System.err.println("bad syntax for option: " + opt); + error = true; + break; + } + options.put(opt.substring(0, idx), opt.substring(idx + 1)); } else if (args[i].startsWith("-")) { System.err.println("illegal option: " + args[i]); error = true; @@ -405,13 +422,14 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa } } if (error) { - System.err.println("usage: sshd [-p port] [-io mina|nio2]"); + System.err.println("usage: sshd [-p port] [-io mina|nio2] [-o option=value]"); System.exit(-1); } System.err.println("Starting SSHD on port " + port); SshServer sshd = SshServer.setUpDefaultServer(); + sshd.getProperties().putAll(options); sshd.setPort(port); sshd.getProperties().put(SshServer.WELCOME_BANNER, "Welcome to SSHD\n"); if (SecurityUtils.isBouncyCastleRegistered()) {
