通过jsch类包操作xshell
代码如下
package com;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class UploadWar {
public static void main(String[] args) {
String ftpHost = "";
int port = 22;
String ftpUserName = "";
String ftpPassword = "";
Session session;
try {
session = con(ftpHost, port, ftpUserName, ftpPassword);
String src = "H:\\test.png"; // 本地文件名
String dst = ""; // 待上传到xshell的文件路径
Upload(session, src, dst);
String cmd1 = "cd shell; sh deploy_ngcrmpfcore_nm.sh ";//执行的命令
Command(session, cmd1);
String win = "d:\\log\\";//本地路径
String linux = "";//xshell的文件路径
UploadWar.Download(session, linux, win);
} catch (JSchException | SftpException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param src
* Windows下的文件路径
* @param dst
* 需要上传到xshell的文件夹
* @throws JSchException
* @throws SftpException
*/
public static void Upload(Session session, String src, String dst) throws JSchException, SftpException {
Channel channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
// System.out.println("Connected successfully to ftpHost ")
((ChannelSftp) channel).put(src, dst);
}
/**
* @throws JSchException
* @throws SftpException
*/
public static void Download(Session session, String src, String dst) throws JSchException, SftpException {
Channel channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
// System.out.println("Connected successfully to ftpHost ")
((ChannelSftp) channel).get(src, dst);
}
/**
* @param cmd
* 脚本命令
* @throws JSchException
* @throws IOException
*/
public static List<String> Command(Session session, String cmd) throws JSchException, IOException {
List<String> l = new ArrayList<String>();
Channel channel2 = session.openChannel("exec");
ChannelExec execChannel = (ChannelExec) channel2;
execChannel.setCommand(cmd);
InputStream in = channel2.getInputStream();
channel2.connect();
StringBuffer sb = new StringBuffer();
int c = -1;
while ((c = in.read()) != -1) {
sb.append((char) c);
}
l.add(sb.toString());
in.close();
return l;
}
/**
* @param session
* 建立SFTP通道的连接
*
* @throws JSchException
*/
public static ChannelSftp getChannel(Session session) throws JSchException {
Channel channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
System.out.println("Connected successfully to ftpHost ");
return (ChannelSftp) channel;
}
/**
*
* @param ftpHost
* IP
* @param port
* 端口 22
* @param ftpUserName
* 用户名
* @param ftpPassword
* 用户密码
* @return session 用于登陆
* @throws JSchException
*
*/
public static Session con(String ftpHost, int port, String ftpUserName, String ftpPassword) throws JSchException {
JSch jsch = new JSch(); // 创建JSch对象
Session session = jsch.getSession(ftpUserName, ftpHost, port); // 根据用户名,主机ip,端口获取一个Session对象
System.out.println("Session created.");
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.connect(); // 通过Session建立链接
session.openChannel("sftp");
return session;
}
}