--- /dev/null
+package de.hacksaar.javatuer;
+
+import com.jcraft.jsch.*;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class SshClient {
+ private static final String TAG = "SshClient";
+ private final String host;
+ private final String username;
+ private final int port;
+ private final JSch jSch;
+ private final TuerLogging log;
+ private Session session;
+ private Channel channel;
+
+ public SshClient(String host, String username, int port, TuerLogging log) {
+ this.host = host;
+ this.username = username;
+ this.port = port;
+ this.log = log;
+ JSch.setLogger(log);
+ jSch = new JSch();
+ }
+
+ public void addPrivateKey(String keyFilePath) throws JSchException {
+ jSch.addIdentity(keyFilePath);
+ }
+
+ public void addPrivateKey(String keyFilePath, String passphrase) throws JSchException {
+ jSch.addIdentity(keyFilePath, passphrase);
+ }
+
+ public void disconnect() {
+ channel.disconnect();
+ channel = null;
+ session.disconnect();
+ session = null;
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ if (channel == null) {
+ return null;
+ }
+ return channel.getInputStream();
+ }
+
+ public OutputStream getOutputStream() throws IOException {
+ if (channel == null) {
+ return null;
+ }
+ return channel.getOutputStream();
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public boolean isConnected() {
+ return channel != null && channel.isConnected() && session != null && session.isConnected();
+ }
+
+ public void login(final String password) throws JSchException {
+ login(new UserInfo() {
+
+ @Override
+ public String getPassphrase() {
+ return null;
+ }
+
+ @Override
+ public String getPassword() {
+ return password;
+ }
+
+ @Override
+ public boolean promptPassphrase(String s) {
+ return false;
+ }
+
+ @Override
+ public boolean promptPassword(String s) {
+ return true;
+ }
+
+ @Override
+ public boolean promptYesNo(String s) {
+ return false;
+ }
+
+ @Override
+ public void showMessage(String s) {
+ log.info(TAG, s);
+ }
+ });
+ }
+
+ public void login() throws JSchException {
+ login(new UserInfo() {
+
+ @Override
+ public String getPassphrase() {
+ return null;
+ }
+
+ @Override
+ public String getPassword() {
+ return null;
+ }
+
+ @Override
+ public boolean promptPassphrase(String s) {
+ return false;
+ }
+
+ @Override
+ public boolean promptPassword(String s) {
+ return false;
+ }
+
+ @Override
+ public boolean promptYesNo(String s) {
+ return false;
+ }
+
+ @Override
+ public void showMessage(String s) {
+ log.info(TAG, s);
+ }
+ });
+ }
+
+ public void login(UserInfo userInfo) throws JSchException {
+ log.debug(TAG, "Creating session");
+ if (session == null) {
+ session = jSch.getSession(username, host, port);
+ }
+ if (!session.isConnected()) {
+ session.setUserInfo(userInfo);
+ log.debug(TAG, "Connecting");
+ session.connect();
+ log.debug(TAG, "Opening channel");
+ channel = session.openChannel("shell");
+ channel.connect();
+ }
+ }
+
+}