1. pom.xml
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.50</version> </dependency>
2.
package xxxxx; import java.io.InputStream; import java.util.Vector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.ChannelSftp.LsEntry; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; import com.jcraft.jsch.UserInfo; public class JschShellUtil { private final Logger LOGGER = LoggerFactory.getLogger(JschShellUtil.class); private String host; private String user; private String password; private int port; private int maxWaitTime; private String keyfile; private String passphrase; private boolean sshKey; private ChannelSftp sftp; private ChannelExec exec; private Session session; public JschShellUtil(String host, String user, String password, int port, int maxWaitTime) { this.host = host; this.user = user; this.password = password; this.port = port; this.maxWaitTime = maxWaitTime; this.keyfile = null; this.passphrase = null; this.sshKey = false; } public JschShellUtil(String host, String user, int port, int maxWaitTime, String keyfile, String passphrase) { this.host = host; this.user = user; this.password = null; this.port = port; this.maxWaitTime = maxWaitTime; this.keyfile = keyfile; this.passphrase = passphrase; this.sshKey = true; } public void open() throws JSchException { JSch client = new JSch(); if (sshKey && keyfile != null && keyfile.length() > 0) { client.addIdentity(this.keyfile, this.passphrase); } session = client.getSession(this.user, this.host, this.port); session.setUserInfo(new UserInfo() { public String getPassphrase() { return null; } public String getPassword() { return password; } public boolean promptPassphrase(String arg0) { return true; } public boolean promptPassword(String arg0) { return true; } public boolean promptYesNo(String arg0) { return true; } public void showMessage(String arg0) { } }); session.setTimeout(maxWaitTime); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; } public void close() { if (sftp != null) { sftp.disconnect(); sftp = null; } if (session != null) { session.disconnect(); session = null; } } public void cd(String path) throws SftpException { sftp.cd(path); } public String pwd() throws SftpException { String pwd = sftp.pwd(); LOGGER.info(sftp.pwd()); return pwd; } public void ls() throws SftpException { Vector<?> vector = sftp.ls("."); for (Object object : vector) { if (object instanceof LsEntry) { LsEntry entry = LsEntry.class.cast(object); LOGGER.info(entry.getFilename()); } } } public void ls(String path) throws SftpException { Vector<?> vector = sftp.ls(path); for (Object object : vector) { if (object instanceof LsEntry) { LsEntry entry = LsEntry.class.cast(object); LOGGER.info(entry.getFilename()); } } } public void rename(String oldPath, String newPath) throws SftpException { sftp.rename(oldPath, newPath); } public void cp(String src, String dest) throws SftpException { int lastSlash = src.lastIndexOf("/"); String srcFile = src; String srcDir = "."; if (lastSlash > -1) { srcFile = src.substring(lastSlash + 1); srcDir = src.substring(0, lastSlash); } String temp = srcDir + "/temp_" + srcFile; rename(src, temp); rename(temp, dest); } public void rm(String file) throws SftpException { sftp.rm(file); } public void mv(String src, String dest) throws SftpException { rename(src, dest); } public void rmdir(String path) throws SftpException { sftp.rmdir(path); } public void mkdir(String path) throws SftpException { sftp.mkdir(path); } public void chmod(int permissions, String path) throws SftpException { sftp.chmod(permissions, path); } /** * 执行一次shell命令,之后连接就关闭 * @param cmd * @return * @throws Exception */ public int runCmd(String cmd) throws Exception { exec = (ChannelExec) session.openChannel("exec"); exec.setCommand(cmd); exec.setInputStream(null); exec.setErrStream(System.err); InputStream in = exec.getInputStream(); exec.connect(); int res = -1; StringBuffer buf = new StringBuffer(1024); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; buf.append(new String(tmp, 0, i)); } if (exec.isClosed()) { res = exec.getExitStatus(); LOGGER.info("Exit-status: " + res); break; } } LOGGER.info(buf.toString()); exec.disconnect(); return res; } public static void main(String[] args) throws Exception { String host = "10.121.163.112 "; String user = "admin"; String password = "admin"; int port = 22; int maxWaitTime = 0; JschShellUtil jsch = new JschShellUtil(host, user, password, port, maxWaitTime); jsch.open(); String filename = "dubbo-demo-provider-2.5.3-assembly.tar.gz"; jsch.runCmd("cd /home/admin/vlt/dubbo-demo-provider-2.5.3/bin; ./stop.sh"); jsch.close(); } }