[SSHD-247] Enable SCP and SFTP in the default distribution Also add an option to select the IO provider
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/925e3ff5 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/925e3ff5 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/925e3ff5 Branch: refs/heads/master Commit: 925e3ff50a9d64f7f48bc7f2cea9da50969fb7e0 Parents: 5debd37 Author: Guillaume Nodet <[email protected]> Authored: Fri Jul 26 11:48:34 2013 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Fri Jul 26 11:48:34 2013 +0200 ---------------------------------------------------------------------- .../main/java/org/apache/sshd/SshServer.java | 28 +++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/925e3ff5/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 59c2f79..57d9faf 100644 --- a/sshd-core/src/main/java/org/apache/sshd/SshServer.java +++ b/sshd-core/src/main/java/org/apache/sshd/SshServer.java @@ -62,7 +62,10 @@ import org.apache.sshd.common.future.CloseFuture; import org.apache.sshd.common.future.SshFutureListener; import org.apache.sshd.common.io.DefaultIoServiceFactory; import org.apache.sshd.common.io.IoAcceptor; +import org.apache.sshd.common.io.IoServiceFactory; import org.apache.sshd.common.io.IoSession; +import org.apache.sshd.common.io.mina.MinaServiceFactory; +import org.apache.sshd.common.io.nio2.Nio2ServiceFactory; import org.apache.sshd.common.mac.HMACMD5; import org.apache.sshd.common.mac.HMACMD596; import org.apache.sshd.common.mac.HMACSHA1; @@ -87,12 +90,14 @@ import org.apache.sshd.server.auth.UserAuthPublicKey; import org.apache.sshd.server.auth.gss.GSSAuthenticator; import org.apache.sshd.server.auth.gss.UserAuthGSS; import org.apache.sshd.server.channel.ChannelSession; +import org.apache.sshd.server.command.ScpCommandFactory; import org.apache.sshd.server.kex.DHG1; import org.apache.sshd.server.kex.DHG14; import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; import org.apache.sshd.server.session.ServerSession; import org.apache.sshd.server.session.SessionFactory; +import org.apache.sshd.server.sftp.SftpSubsystem; import org.apache.sshd.server.shell.ProcessShellFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -445,6 +450,7 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa public static void main(String[] args) throws Exception { int port = 8000; + String provider; boolean error = false; for (int i = 0; i < args.length; i++) { @@ -454,6 +460,20 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa break; } port = Integer.parseInt(args[++i]); + } else if ("-io".equals(args[i])) { + if (i + 1 >= args.length) { + System.err.println("option requires an argument: " + args[i]); + break; + } + provider = args[++i]; + if ("mina".equals(provider)) { + System.setProperty(IoServiceFactory.class.getName(), MinaServiceFactory.class.getName()); + } else if ("nio2".endsWith(provider)) { + System.setProperty(IoServiceFactory.class.getName(), Nio2ServiceFactory.class.getName()); + } else { + System.err.println("provider should be mina or nio2: " + args[i]); + break; + } } else if (args[i].startsWith("-")) { System.err.println("illegal option: " + args[i]); error = true; @@ -465,7 +485,7 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa } } if (error) { - System.err.println("usage: sshd [-p port]"); + System.err.println("usage: sshd [-p port] [-io mina|nio2]"); System.exit(-1); } @@ -514,7 +534,13 @@ public class SshServer extends AbstractFactoryManager implements ServerFactoryMa return true; } }); + sshd.setCommandFactory(new ScpCommandFactory()); + sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList( + new SftpSubsystem.Factory() + )); sshd.start(); + + Thread.sleep(Long.MAX_VALUE); } }
