servermanager/src/main/java/de/gurkengewuerz/monitoring/object/SSHManager.java

124 lines
3.6 KiB
Java

package de.gurkengewuerz.monitoring.object;
import com.jcraft.jsch.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* SSHManager
*
* @author cabbott
* @version 1.0
*/
public class SSHManager {
private static final Logger LOGGER =
Logger.getLogger(SSHManager.class.getName());
private JSch jschSSHChannel;
private String strUserName;
private String strConnectionIP;
private int intConnectionPort;
private Session sesConnection;
private String errorMessage = null;
private int intTimeOut;
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;
}
private void doCommonConstructorActions(String userName, String privateKey, String privateKey_pass, String connectionIP, String knownHostsFileName) {
jschSSHChannel = new JSch();
try {
if (privateKey_pass.isEmpty()) {
jschSSHChannel.addIdentity(privateKey);
} else {
jschSSHChannel.addIdentity(privateKey, privateKey_pass);
}
jschSSHChannel.setKnownHosts(knownHostsFileName);
} catch (JSchException jschX) {
logError(jschX.getMessage());
}
strUserName = userName;
strConnectionIP = connectionIP;
}
public String connect() {
errorMessage = null;
try {
sesConnection = jschSSHChannel.getSession(strUserName,
strConnectionIP, intConnectionPort);
//sesConnection.setPassword(strPassword);
// UNCOMMENT THIS FOR TESTING PURPOSES, BUT DO NOT USE IN PRODUCTION
sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.connect(intTimeOut);
} catch (JSchException jschX) {
errorMessage = jschX.getMessage();
}
return errorMessage;
}
public boolean hasError() {
return errorMessage != null;
}
public String getErrorMessage() {
return errorMessage;
}
private String logError(String errorMessage) {
if (errorMessage != null) {
LOGGER.log(Level.SEVERE, "{0}:{1} - {2}",
new Object[]{strConnectionIP, intConnectionPort, errorMessage});
}
return errorMessage;
}
private String logWarning(String warnMessage) {
if (warnMessage != null) {
LOGGER.log(Level.WARNING, "{0}:{1} - {2}",
new Object[]{strConnectionIP, intConnectionPort, warnMessage});
}
return warnMessage;
}
public String sendCommand(String command) {
StringBuilder outputBuffer = new StringBuilder();
try {
Channel channel = sesConnection.openChannel("exec");
((ChannelExec) channel).setCommand(command);
InputStream commandOutput = channel.getInputStream();
channel.connect();
int readByte = commandOutput.read();
while (readByte != 0xffffffff) {
outputBuffer.append((char) readByte);
readByte = commandOutput.read();
}
channel.disconnect();
} catch (IOException | JSchException ioX) {
logWarning(ioX.getMessage());
return null;
}
return outputBuffer.toString();
}
public void close() {
sesConnection.disconnect();
}
}