pom.xml中添加如下内容:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
1.添加一个类,继承UserInfo。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcraft.jsch.UserInfo; public class MyUserInfo implements UserInfo { private Logger logger = LoggerFactory.getLogger(getClass()); private String password; @Override public String getPassphrase() { return null; } @Override public String getPassword() { return password; } @Override public boolean promptPassword(String message) { return true; } @Override public boolean promptPassphrase(String message) { return true; } @Override public boolean promptYesNo(String message) { return true; } @Override public void showMessage(String message) { logger.info(message); } public void setPassword(String password) { this.password = password; } }
2.执行命令方法如下,特意另起一个方法,说明了执行sudo + cmd的方法。
import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SSHClientTest { private Logger logger = LoggerFactory.getLogger(getClass()); /** * 直接执行命令 */ public void exec() { JSch jsch = new JSch(); try { Session session = jsch.getSession("root", "192.168.101.35", 22); MyUserInfo ui = new MyUserInfo(); ui.setPassword("omcomc"); session.setUserInfo(ui); session.connect(); String cmd = "ps -ef|grep -v grep|grep java"; Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(cmd); InputStream in = channel.getInputStream(); OutputStream out = channel.getOutputStream(); ((ChannelExec) channel).setErrStream(System.err); channel.connect(); out.flush(); logger.info(IOUtils.toString(in, Charset.forName("utf-8"))); channel.disconnect(); session.disconnect(); } catch (Exception e) { logger.error("", e); } } /** * sudo + cmd的形式 */ public void execWithSudo() { JSch jsch = new JSch(); try { String password = "testuser1"; Session session = jsch.getSession("omc", "192.168.101.35", 22); MyUserInfo ui = new MyUserInfo(); ui.setPassword(password); session.setUserInfo(ui); session.connect(); String cmd = "sudo -S -p '' systemctl start sasHandler"; Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(cmd); InputStream in = channel.getInputStream(); OutputStream out = channel.getOutputStream(); ((ChannelExec) channel).setErrStream(System.err); channel.connect(); out.write((password + "\n").getBytes()); out.flush(); logger.info(IOUtils.toString(in, Charset.forName("utf-8"))); channel.disconnect(); session.disconnect(); } catch (Exception e) { logger.error("", e); } } }
--