2013-11-14 07:17:51 +00:00
|
|
|
package com.ryanmichela.sshd;
|
|
|
|
|
2018-03-25 19:44:41 +00:00
|
|
|
import org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory;
|
2017-11-13 01:02:19 +00:00
|
|
|
import org.apache.sshd.server.SshServer;
|
2013-11-14 07:17:51 +00:00
|
|
|
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
|
2018-03-25 19:44:41 +00:00
|
|
|
import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
|
2013-11-14 07:17:51 +00:00
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
2018-03-25 19:44:41 +00:00
|
|
|
import java.nio.file.FileSystems;
|
|
|
|
import java.util.Collections;
|
2013-11-14 07:17:51 +00:00
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copyright 2013 Ryan Michela
|
|
|
|
*/
|
|
|
|
public class SshdPlugin extends JavaPlugin {
|
|
|
|
private SshServer sshd;
|
|
|
|
public static SshdPlugin instance;
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onLoad() {
|
|
|
|
saveDefaultConfig();
|
|
|
|
File authorizedKeys = new File(getDataFolder(), "authorized_keys");
|
|
|
|
if (!authorizedKeys.exists()) {
|
|
|
|
authorizedKeys.mkdirs();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Don't go any lower than INFO or SSHD will cause a stack overflow exception.
|
|
|
|
// SSHD will log that it wrote bites to the output stream, which writes
|
|
|
|
// bytes to the output stream - ad nauseaum.
|
|
|
|
getLogger().setLevel(Level.INFO);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onEnable() {
|
|
|
|
instance = this;
|
|
|
|
|
|
|
|
sshd = SshServer.setUpDefaultServer();
|
|
|
|
sshd.setPort(getConfig().getInt("port", 22));
|
2014-09-05 06:01:47 +00:00
|
|
|
String host = getConfig().getString("listenAddress", "all");
|
|
|
|
sshd.setHost(host.equals("all") ? null : host);
|
2013-11-14 07:17:51 +00:00
|
|
|
|
|
|
|
File hostKey = new File(getDataFolder(), "hostkey");
|
|
|
|
File authorizedKeys = new File(getDataFolder(), "authorized_keys");
|
|
|
|
|
2017-11-13 01:02:19 +00:00
|
|
|
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(hostKey));
|
2013-11-14 07:17:51 +00:00
|
|
|
sshd.setShellFactory(new ConsoleShellFactory());
|
|
|
|
sshd.setPasswordAuthenticator(new ConfigPasswordAuthenticator());
|
|
|
|
sshd.setPublickeyAuthenticator(new PublicKeyAuthenticator(authorizedKeys));
|
2018-03-25 19:44:41 +00:00
|
|
|
|
|
|
|
if (getConfig().getBoolean("enableSFTP")) {
|
|
|
|
sshd.setSubsystemFactories(Collections.singletonList(new SftpSubsystemFactory()));
|
|
|
|
sshd.setFileSystemFactory(new VirtualFileSystemFactory(
|
|
|
|
FileSystems.getDefault().getPath(
|
|
|
|
getDataFolder().getAbsolutePath()
|
|
|
|
).getParent().getParent()
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
2013-11-14 07:17:51 +00:00
|
|
|
sshd.setCommandFactory(new ConsoleCommandFactory());
|
|
|
|
try {
|
|
|
|
sshd.start();
|
|
|
|
} catch (IOException e) {
|
|
|
|
getLogger().severe("Failed to start SSH server! " + e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onDisable() {
|
|
|
|
try {
|
|
|
|
sshd.stop();
|
2014-07-03 07:18:34 +00:00
|
|
|
} catch (Exception e) {
|
2013-11-14 07:17:51 +00:00
|
|
|
// do nothing
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|