Minecraft-SSHD/src/main/java/com/ryanmichela/sshd/SshdPlugin.java

106 lines
2.8 KiB
Java
Raw Normal View History

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 com.ryanmichela.sshd.ConsoleShellFactory;
import com.ryanmichela.sshd.MkpasswdCommand;
2013-11-14 07:17:51 +00:00
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
2018-03-25 19:44:41 +00:00
import java.nio.file.FileSystems;
import java.nio.file.Files;
2018-03-25 19:44:41 +00:00
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
{
2018-05-06 16:42:57 +00:00
private SshServer sshd;
public static SshdPlugin instance;
2013-11-14 07:17:51 +00:00
@Override public void onLoad()
{
saveDefaultConfig();
File authorizedKeys = new File(getDataFolder(), "authorized_keys");
if (!authorizedKeys.exists())
authorizedKeys.mkdirs();
try
{
File motd = new File(getDataFolder(), "motd.txt");
if (!motd.exists())
{
InputStream link = (getClass().getResourceAsStream("/motd.txt"));
Files.copy(link, motd.getAbsoluteFile().toPath());
}
}
catch (IOException e)
{
e.printStackTrace();
}
2013-11-14 07:17:51 +00:00
// 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);
}
2013-11-14 07:17:51 +00:00
@Override public void onEnable()
{
instance = this;
2013-11-14 07:17:51 +00:00
sshd = SshServer.setUpDefaultServer();
sshd.setPort(getConfig().getInt("Port", 1025));
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");
2013-11-14 07:17:51 +00:00
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(hostKey.toPath()));
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()));
}
2018-03-25 19:44:41 +00:00
this.getCommand("mkpasswd").setExecutor(new MkpasswdCommand());
sshd.setCommandFactory(new ConsoleCommandFactory());
try
{
sshd.start();
}
catch (IOException e)
{
getLogger().log(Level.SEVERE, "Failed to start SSH server! ", e);
}
}
2013-11-14 07:17:51 +00:00
@Override public void onDisable()
{
try
{
sshd.stop();
}
catch (Exception e)
{
// do nothing
}
}
2013-11-14 07:17:51 +00:00
}