本文介绍 java连接linux的三种简单的方式。
本地调用
使用JDK自带的RunTime类和Process类实现
public static void main(String[] args){
Process proc = RunTime.getRunTime().exec("cd /home/winnie; ls;")
// 标准输入流(必须写在 waitFor 之前)
String inStr = consumeInputStream(proc.getInputStream());
// 标准错误流(必须写在 waitFor 之前)
String errStr = consumeInputStream(proc.getErrorStream());
int retCode = proc.waitFor();
if(retCode == 0){
System.out.println("程序正常执行结束");
}
}
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s ;
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
return sb.toString();
}
方法二
导入ganymed-ssh2包
package com.ci.main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
public class ganyssh {
public static void main(String[] args){
String host = "192.168.3.7";
int port = 22;
String username = "root";
String password = "pass";
// 创建连接
Connection conn = new Connection(host, port);
// 启动连接
try {
conn.connect();
// 验证用户密码
conn.authenticateWithPassword(username, password);
Session session = conn.openSession();
session.execCommand("cd /home/test; sh batch.sh; cat test.log;");
// 消费所有输入流
String inStr = consumeInputStream(session.getStdout());
String errStr = consumeInputStream(session.getStderr());
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
conn.close();
}
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = "";
StringBuilder sb = new StringBuilder();
try {
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return sb.toString();
}
}
方法三
使用jsch实现
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public static void main(String[] args){
String host = "192.168.3.7";
int port = 22;
String username = "root";
String password = "pass";
// 创建JSch
JSch jSch = new JSch();
// 获取session
Session session = jSch.getSession(username, host, port);
session.setPassword(password);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setProperties(prop);
// 启动连接
session.connect();
ChannelExec exec = (ChannelExec)session.openChannel("exec");
exec.setCommand("cd /home/winnie; ls;");
exec.setInputStream(null);
exec.setErrStream(System.err);
exec.connect();
// 消费所有输入流,必须在exec之后
String inStr = consumeInputStream(exec.getInputStream());
String errStr = consumeInputStream(exec.getErrStream());
exec.disconnect();
session.disconnect();
}
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s ;
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
return sb.toString();
}