JSch连接SSH远程执行命令

JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。

来自百度百科!

SSHExcuteCommandHelper

package test;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;




import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;


/**
 * SSH工具类
 * 
 */
public class SSHExcuteCommandHelper {
Session session = null;
ChannelExec openChannel = null;
/**
* @param host  主机ip
* @param uname 用户名
* @param upwd 密码
* @param port ssh端口 
*/
public SSHExcuteCommandHelper(String host, String user, String pwd, int port) {
JSch jsch = new JSch();
try {
session = jsch.getSession(user, host, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setTimeout(1000);
session.setConfig(config);
session.setPassword(pwd);
} catch (JSchException e) {
e.printStackTrace();
}
}
/**
* 是否连接成功,调用如果不需要调用execCommand方法那么必须调用 disconnect方法关闭session
* @return
*/
public boolean canConnection(){
try {
session.connect();
return true;
} catch (JSchException e) {
e.printStackTrace();
return false;
}
}
/**
* 关闭连接
*/
public void disconnect(){
if (openChannel != null && !openChannel.isClosed()) {
openChannel.disconnect();
}
if (session != null && session.isConnected()) {
session.disconnect();
}
}


/**
* 执行命令
* @param command
* @return
*/
public String execCommand(String command) {
StringBuffer result = new StringBuffer();
try {
if(!session.isConnected()){
session.connect();
}
openChannel = (ChannelExec) session.openChannel("exec");
openChannel.setCommand(command);
//int exitStatus = openChannel.getExitStatus();
openChannel.connect();
InputStream in = openChannel.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));

String tmpStr = "";
while ((tmpStr = reader.readLine()) != null) {
result.append(new String(tmpStr.getBytes("gbk"), "UTF-8")).append("\n");
}

} catch (JSchException | IOException e) {
e.printStackTrace();
result.append(e.getMessage());
} finally {
disconnect();
}
return result.toString();
}
/**
* 解析
* @param result
* @return
*/
public List<List<String>> parseResult(String result){
List<List<String>> parseResult = new ArrayList<>();
List<String> list = null;
//
for (String line : result.split("\n")) {
list = new ArrayList<String>();
String[] columns = {};
//这个是针对df命令的 [Mounted on] 其实就一个,如果用空格就会分割出两个
if(line.contains("Mounted ")){
columns = line.replace("Mounted ", "Mounted-").split(" ");
}else{
columns = line.split(" ");
}

for (String column : columns) {
if (!" ".equals(column) && !"".equals(column)) {
list.add(column);
}
}
parseResult.add(list);
}
return parseResult;
}


public static void main(String args[]) {
SSHExcuteCommandHelper execute = new SSHExcuteCommandHelper("xxxx", "xxxx", "xxxxx", 22);
System.out.println("是否连接成功"+execute.canConnection());
String s = execute.execCommand("df");
System.out.println("解析前");
System.out.println(s);
System.out.println("解析后");
List<List<String>> parseResult = execute.parseResult(s);
for (List<String> l : parseResult) {
System.out.println(l);
}



}
}

上面的这个很简单的功能,一次只能执行一条命令,怎么样才能间断的执行执行多条命令,只能去找找!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值