Jsch的使用demo(java的ssh执行类)
package com.day0707;
import com.jcraft.jsch.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Stream;
public class JSchDemo {
private Logger log = LoggerFactory.getLogger(this.getClass());
private Session session = null;
@Before
public void open() throws JSchException {
log.debug("开启会话");
JSch jSch = new JSch();
jSch.addIdentity("D:\\hehui\\jsch\\admin_private.ppk");
Session session = jSch.getSession("admin", "your host", 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();
this.session = session;
}
@After
public void close(){
log.debug("关闭会话");
this.session.disconnect();
}
@Test
public void test1() throws JSchException {
JSch jSch = new JSch();
Session session = jSch.getSession("admin", "your host", 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setPassword("your password");
session.setConfig(config);
session.connect();
log.debug("是否连接:" + session.isConnected());
log.debug("会话:" + session);
session.disconnect();
log.debug("是否连接:" + session.isConnected());
}
@Test
public void test2() throws JSchException {
JSch jSch = new JSch();
jSch.addIdentity("D:\\hehui\\jsch\\admin_private.ppk");
Session session = jSch.getSession("admin", "your host", 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();
log.debug("是否连接:" + session.isConnected());
log.debug("会话:" + session);
session.disconnect();
log.debug("是否连接:" + session.isConnected());
}
@Test
public void test3() throws JSchException, IOException {
log.debug("会话:\r\n" + session);
ChannelExec channelExec = (ChannelExec)session.openChannel("exec");
channelExec.setCommand("df -h");
channelExec.connect();
InputStream inputStream = channelExec.getInputStream();
String result = IOUtils.toString(inputStream);
log.debug("执行结果:\r\n" + result);
}
@Test
public void test4() {
try {
Channel channel = session.openChannel("sftp");
ChannelSftp channelSftp = (ChannelSftp) channel;
channelSftp.connect();
String filePath = "D:\\hehui\\jsch\\apache-tomcat-9.0.35.tar.gz";
String fileName = "apache-tomcat-9.0.35.tar.gz";
String serverDir = "/home/admin/jsch/";
AtomicReference<String> dir = new AtomicReference<>("/");
Stream.of(serverDir.split("\\/")).forEach(p -> {
try {
if (StringUtils.isNotEmpty(p)) {
String existDir = dir.get();
if (StringUtils.equals(existDir,"/")) {
dir.set(existDir + p);
} else {
dir.set(existDir + "/" + p);
}
channelSftp.cd(dir.get());
}
} catch (SftpException e1) {
log.debug("创建目录:" + p);
try {
channelSftp.mkdir(dir.get());
channelSftp.cd(dir.get());
} catch (SftpException e2) {
log.error("error:",e2);
throw new RuntimeException(e2);
}
}
});
FileInputStream in = new FileInputStream(filePath);
channelSftp.put(in,fileName);
channelSftp.disconnect();
} catch (JSchException e) {
log.error("error",e);
} catch (FileNotFoundException e) {
log.error("error:",e);
} catch (SftpException e) {
log.error("error",e);
}
}
@Test
public void test5(){
try {
Channel channel = session.openChannel("sftp");
ChannelSftp channelSftp = (ChannelSftp) channel;
channelSftp.connect();
String serverDir = "/home/admin/jsch/";
String serverFile = "apache-tomcat-9.0.35.tar.gz";
FileOutputStream out = new FileOutputStream("D:\\hehui\\jsch\\apache-tomcat-9.0.35_download.tar.gz");
channelSftp.cd(serverDir);
channelSftp.get(serverFile,out);
channelSftp.disconnect();
} catch (JSchException e) {
log.error("error:",e);
} catch (FileNotFoundException e) {
log.error("error:",e);
} catch (SftpException e) {
log.error("error:",e);
}
}
}