|
APP嘗試用SSH來控制遠端伺服器,以下是簡單的例子
SSHManager.java from Run a command over SSH with JSch
MainActivity.java
- package com.example.demyon.opengatefinal;
- import android.util.Log;
- import com.jcraft.jsch.Channel;
- import com.jcraft.jsch.ChannelExec;
- import com.jcraft.jsch.JSch;
- import com.jcraft.jsch.JSchException;
- import com.jcraft.jsch.Session;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- /**
- * Created by Demyon on 10/15/2017.
- */
- 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 String strPassword;
- private Session sesConnection;;
- private int intTimeOut;
- private void doCommonConstructorActions(String userName,
- String password, String connectionIP, String knownHostsFileName)
- {
- jschSSHChannel = new JSch();
- try
- {
- jschSSHChannel.setKnownHosts(knownHostsFileName);
- }
- catch(JSchException jschX)
- {
- logError(jschX.getMessage());
- }
- strUserName = userName;
- strPassword = password;
- strConnectionIP = connectionIP;
- }
- 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);
- 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;
- }
- public String connect()
- {
- String 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;
- }
- 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();
- Log.v("Tag","SendCommand - outputBuffer");
- try
- {
- Log.v("Tag","SendCommand - Try");
- Channel channel = sesConnection.openChannel("exec");
- Log.v("Tag","SendCommand - Channel");
- ((ChannelExec)channel).setCommand(command);
- Log.v("Tag","SendCommand - ChannelExec");
- InputStream commandOutput = channel.getInputStream();
- Log.v("Tag","SendCommand - InputStream");
- channel.connect();
- Log.v("Tag","SendCommand - channelConnect");
- int readByte = commandOutput.read();
- Log.v("Tag","SendCommand - readByte");
- while(readByte != 0xffffffff)
- {
- Log.v("Tag","SendCommand - while ReadByte");
- outputBuffer.append((char)readByte);
- Log.v("Tag","SendCommand - OutputBuffer append");
- readByte = commandOutput.read();
- }
- channel.disconnect();
- }
- catch(IOException ioX)
- {
- logWarning(ioX.getMessage());
- return null;
- }
- catch(JSchException jschX)
- {
- logWarning(jschX.getMessage());
- return null;
- }
- return outputBuffer.toString();
- }
- public void close()
- {
- sesConnection.disconnect();
- }
- }
複製代碼
參考文章https://stackoverflow.com/questi ... -jsch-remote-access
|
|