3 import java
.io
.IOException
;
4 import java
.nio
.file
.Path
;
5 import java
.nio
.file
.Paths
;
7 import org
.apache
.sshd
.server
.SshServer
;
8 import org
.apache
.sshd
.server
.keyprovider
.SimpleGeneratorHostKeyProvider
;
9 import org
.apache
.sshd
.server
.scp
.ScpCommandFactory
;
10 import org
.apache
.sshd
.server
.shell
.ProcessShellFactory
;
11 import org
.argeo
.util
.OS
;
13 /** A simple SSH server with some defaults. Supports SCP. */
14 @SuppressWarnings("restriction")
15 public class BasicSshServer
{
17 private Path hostKeyPath
;
19 private SshServer sshd
= null;
21 public BasicSshServer(Integer port
, Path hostKeyPath
) {
23 this.hostKeyPath
= hostKeyPath
;
28 sshd
= SshServer
.setUpDefaultServer();
30 if (hostKeyPath
== null)
31 throw new IllegalStateException("An SSH server key must be set");
32 sshd
.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(hostKeyPath
));
33 // sshd.setShellFactory(new ProcessShellFactory(new String[] { "/bin/sh", "-i",
35 String
[] shellCommand
= OS
.LOCAL
.getDefaultShellCommand();
36 // FIXME transfer args
37 // sshd.setShellFactory(new ProcessShellFactory(shellCommand));
38 // sshd.setShellFactory(new ProcessShellFactory(shellCommand[0], shellCommand));
39 sshd
.setCommandFactory(new ScpCommandFactory());
41 } catch (Exception e
) {
42 throw new RuntimeException("Cannot start SSH server on port " + port
, e
);
46 public void destroy() {
49 } catch (IOException e
) {
50 throw new RuntimeException("Cannot stop SSH server on port " + port
, e
);
54 public Integer
getPort() {
58 public void setPort(Integer port
) {
62 public Path
getHostKeyPath() {
66 public void setHostKeyPath(Path hostKeyPath
) {
67 this.hostKeyPath
= hostKeyPath
;
70 public static void main(String
[] args
) {
72 Path hostKeyPath
= Paths
.get("hostkey.ser");
75 port
= Integer
.parseInt(args
[0]);
77 hostKeyPath
= Paths
.get(args
[1]);
78 } catch (Exception e1
) {
82 BasicSshServer sshServer
= new BasicSshServer(port
, hostKeyPath
);
84 Runtime
.getRuntime().addShutdownHook(new Thread("Shutdown SSH server") {
92 synchronized (sshServer
) {
95 } catch (InterruptedException e
) {
101 public static void printUsage() {
102 System
.out
.println("java " + BasicSshServer
.class.getName() + " [port] [server key path]");