diff --git a/src/main/java/de/gurkengewuerz/monitoring/Config.java b/src/main/java/de/gurkengewuerz/monitoring/Config.java index f6ad292..cd2016e 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/Config.java +++ b/src/main/java/de/gurkengewuerz/monitoring/Config.java @@ -37,6 +37,7 @@ public class Config extends JSONObject { this.put("debug", true); this.put("sqlite", Variables.DATABASE_NAME); this.put("private_key", Variables.PRIVATE_KEY); + this.put("private_key_pass", ""); JSONObject custom_commands = new JSONObject(); custom_commands.put("Screen installieren", "apt-get install screen"); diff --git a/src/main/java/de/gurkengewuerz/monitoring/GUI.java b/src/main/java/de/gurkengewuerz/monitoring/GUI.java index 18058b2..cee73dc 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/GUI.java +++ b/src/main/java/de/gurkengewuerz/monitoring/GUI.java @@ -88,6 +88,13 @@ public class GUI { MultiWindowTextGUI gui = new MultiWindowTextGUI(screen, new DefaultWindowManager(), new EmptySpace(TextColor.ANSI.BLUE)); + if (!StartUp.getPrivateKey().exists()) { + Logger.error(StartUp.getPrivateKey().getPath() + " wurde nicht gefunden!"); + MessageDialog.showMessageDialog(gui, "ERROR!", StartUp.getPrivateKey().getPath() + " wurde nicht gefunden!", MessageDialogButton.Cancel); + gui.addWindowAndWait(window); + return; + } + CheckBoxList checkBoxList = new CheckBoxList().addTo(leftPanel); updateList(checkBoxList, serverlist); @@ -145,7 +152,7 @@ public class GUI { checkBoxList.addItem(servername); Logger.info("Added: " + ip + " " + port); MessageDialog.showMessageDialog(gui, "INFO", "Server hinzugefĆ¼gt.\n" + - "Gehe sicher das der Public Key von " + StartUp.getPrivate_key() + " auf dem Server abgelegt wurde.", MessageDialogButton.Continue); + "Gehe sicher das der Public Key von " + StartUp.getPrivateKey().getPath() + " auf dem Server abgelegt wurde.", MessageDialogButton.Continue); } catch (SQLException e) { Logger.error(e); } @@ -190,15 +197,15 @@ public class GUI { gui.addWindow(windowStatus); gui.setActiveWindow(windowStatus); }) - .addAction("Updaten", () -> MassCommand.run("apt-get update && apt-get upgrade -y", gui, serverarray, StartUp.getPrivate_key())) - .addAction("Herunterfahren", () -> MassCommand.run("shutdown -h now", gui, serverarray, StartUp.getPrivate_key())) - .addAction("Neustart", () -> MassCommand.run("reboot", gui, serverarray, StartUp.getPrivate_key())); + .addAction("Updaten", () -> MassCommand.run("apt-get update && apt-get upgrade -y", gui, serverarray, StartUp.getPrivateKey())) + .addAction("Herunterfahren", () -> MassCommand.run("shutdown -h now", gui, serverarray, StartUp.getPrivateKey())) + .addAction("Neustart", () -> MassCommand.run("reboot", gui, serverarray, StartUp.getPrivateKey())); JSONObject customCommands = StartUp.getConfig().getCustomCommands(); for (int i = 0; i < customCommands.names().length(); i++) { String key = customCommands.names().getString(i); String value = customCommands.getString(key); - pre.addAction(key, () -> MassCommand.run(value, gui, serverarray, StartUp.getPrivate_key())); + pre.addAction(key, () -> MassCommand.run(value, gui, serverarray, StartUp.getPrivateKey())); } pre.build().showDialog(gui); diff --git a/src/main/java/de/gurkengewuerz/monitoring/Poller.java b/src/main/java/de/gurkengewuerz/monitoring/Poller.java index 254861e..2e99a8e 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/Poller.java +++ b/src/main/java/de/gurkengewuerz/monitoring/Poller.java @@ -24,6 +24,10 @@ public class Poller { public Poller() { scheduler = Executors.newScheduledThreadPool(1); + if (!StartUp.getPrivateKey().exists()) { + Logger.error(StartUp.getPrivateKey().getPath() + " wurde nicht gefunden!"); + return; + } scheduler.scheduleAtFixedRate(() -> { HashMap serverlist = Server.getServerList(StartUp.getDb()); @@ -34,7 +38,7 @@ public class Poller { Logger.info("Paused!"); return; } - SSHManager manager = server.getSSHSession(StartUp.getPrivate_key()); + SSHManager manager = server.getSSHSession(StartUp.getPrivateKey()); if (manager.hasError()) { status.setState(State.OFFLINE); Logger.error("Offline!"); diff --git a/src/main/java/de/gurkengewuerz/monitoring/StartUp.java b/src/main/java/de/gurkengewuerz/monitoring/StartUp.java index 7093513..3391ad3 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/StartUp.java +++ b/src/main/java/de/gurkengewuerz/monitoring/StartUp.java @@ -1,6 +1,7 @@ package de.gurkengewuerz.monitoring; import de.gurkengewuerz.monitoring.object.Database; +import de.gurkengewuerz.monitoring.object.PrivateKey; import org.apache.commons.cli.*; import org.pmw.tinylog.Logger; @@ -14,7 +15,7 @@ import java.sql.SQLException; public class StartUp { private static Database db; private static Config conf; - private static String private_key; + private static PrivateKey private_key; public static void main(String... args) throws IOException { // START-ARGUMENTS @@ -75,11 +76,7 @@ public class StartUp { // END-Datenbank // START-PRIV KEY - private_key = conf.getString("private_key"); - if (!new File(private_key).exists()) { - Logger.error(private_key + " wurde nicht gefunden!"); - System.exit(1); - } + private_key = new PrivateKey(conf.getString("private_key"), conf.getString("private_key_pass")); // END-PRIV KEY if (cmd.hasOption("p")) { @@ -93,7 +90,7 @@ public class StartUp { return db; } - public static String getPrivate_key() { + public static PrivateKey getPrivateKey() { return private_key; } diff --git a/src/main/java/de/gurkengewuerz/monitoring/object/MassCommand.java b/src/main/java/de/gurkengewuerz/monitoring/object/MassCommand.java index c8b5ee1..f7c8956 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/object/MassCommand.java +++ b/src/main/java/de/gurkengewuerz/monitoring/object/MassCommand.java @@ -18,13 +18,13 @@ import java.util.List; public class MassCommand { private String command; - private String private_key; + private PrivateKey private_key; private List serverList = new ArrayList<>(); private StatusReply answer; private boolean stop = false; private Thread t; - public MassCommand(String command, String private_key, List serverList, StatusReply answer) { + public MassCommand(String command, PrivateKey private_key, List serverList, StatusReply answer) { this.command = command; this.private_key = private_key; this.serverList = serverList; @@ -32,10 +32,10 @@ public class MassCommand { } public MassCommand(String command, List serverList, StatusReply answer) { - this(command, "", serverList, answer); + this(command, new PrivateKey(""), serverList, answer); } - public static void run(String command, MultiWindowTextGUI gui, List serverarray, String ssh_private) { + public static void run(String command, MultiWindowTextGUI gui, List serverarray, PrivateKey ssh_private) { Label label = new Label("[ ] 00%"); Button button = new Button("Abbruch"); BasicWindow windowStatus = GUI.getCallbackWindow(label, button); @@ -86,7 +86,7 @@ public class MassCommand { button.takeFocus(); } - public MassCommand setPrivateKey(String private_key) { + public MassCommand setPrivateKey(PrivateKey private_key) { this.private_key = private_key; return this; } @@ -98,7 +98,7 @@ public class MassCommand { answer.onStart(); serverList.forEach(server -> { if (stop) return; - if (failed[0]) return; + failed[0] = false; SSHManager manager = server.getSSHSession(private_key); if (manager.hasError()) { failed[0] = true; diff --git a/src/main/java/de/gurkengewuerz/monitoring/object/PrivateKey.java b/src/main/java/de/gurkengewuerz/monitoring/object/PrivateKey.java new file mode 100644 index 0000000..9ca4618 --- /dev/null +++ b/src/main/java/de/gurkengewuerz/monitoring/object/PrivateKey.java @@ -0,0 +1,40 @@ +package de.gurkengewuerz.monitoring.object; + + +import java.io.File; + +/** + * Created by gurkengewuerz.de on 25.10.2017. + */ +public class PrivateKey { + + private String path; + private String pass; + private boolean exists = false; + + public PrivateKey(String path, String pass) { + this.path = path; + this.pass = pass; + exists = new File(path).exists(); + } + + public PrivateKey(String path) { + this(path, ""); + } + + public boolean hasPassword() { + return !pass.isEmpty(); + } + + public boolean exists() { + return exists; + } + + public String getPath() { + return path; + } + + public String getPassword() { + return pass; + } +} diff --git a/src/main/java/de/gurkengewuerz/monitoring/object/SSHManager.java b/src/main/java/de/gurkengewuerz/monitoring/object/SSHManager.java index 3310ac1..dc03636 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/object/SSHManager.java +++ b/src/main/java/de/gurkengewuerz/monitoring/object/SSHManager.java @@ -21,48 +21,32 @@ public class SSHManager { private String strUserName; private String strConnectionIP; private int intConnectionPort; - private String strPassword; private Session sesConnection; private String errorMessage = null; private int intTimeOut; - public SSHManager(String userName, String password, - String connectionIP, String knownHostsFileName) { - doCommonConstructorActions(userName, password, - connectionIP, knownHostsFileName); - intConnectionPort = 22; - intTimeOut = 60000; - } - - public SSHManager(String userName, String password, String connectionIP, - String knownHostsFileName, int connectionPort) { - doCommonConstructorActions(userName, password, connectionIP, - knownHostsFileName); + public SSHManager(String userName, String privateKey, String privateKey_pass, String connectionIP, String knownHostsFileName, int connectionPort) { + doCommonConstructorActions(userName, privateKey, privateKey_pass, connectionIP, knownHostsFileName); intConnectionPort = connectionPort; intTimeOut = 60000; } - public SSHManager(String userName, String password, String connectionIP, - String knownHostsFileName, int connectionPort, int timeOutMilliseconds) { - doCommonConstructorActions(userName, password, connectionIP, - knownHostsFileName); - intConnectionPort = connectionPort; - intTimeOut = timeOutMilliseconds; - } - - private void doCommonConstructorActions(String userName, - String password, String connectionIP, String knownHostsFileName) { + private void doCommonConstructorActions(String userName, String privateKey, String privateKey_pass, String connectionIP, String knownHostsFileName) { jschSSHChannel = new JSch(); try { - jschSSHChannel.addIdentity(password); + if (privateKey_pass.isEmpty()) { + jschSSHChannel.addIdentity(privateKey); + } else { + jschSSHChannel.addIdentity(privateKey, privateKey_pass); + } + jschSSHChannel.setKnownHosts(knownHostsFileName); } catch (JSchException jschX) { logError(jschX.getMessage()); } strUserName = userName; - strPassword = password; strConnectionIP = connectionIP; } diff --git a/src/main/java/de/gurkengewuerz/monitoring/object/Server.java b/src/main/java/de/gurkengewuerz/monitoring/object/Server.java index 6bec48b..528ef8a 100644 --- a/src/main/java/de/gurkengewuerz/monitoring/object/Server.java +++ b/src/main/java/de/gurkengewuerz/monitoring/object/Server.java @@ -98,8 +98,8 @@ public class Server { "Status: " + status.getState().toString(); } - public SSHManager getSSHSession(String ssh_private) { - SSHManager instance = new SSHManager(getUsername(), ssh_private, ip, "", port); + public SSHManager getSSHSession(PrivateKey privateKey) { + SSHManager instance = new SSHManager(getUsername(), privateKey.getPath(), privateKey.getPassword(), ip, "", port); String errorMessage = instance.connect(); if (errorMessage != null) {