jsch - java ssh 客户端


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);
        }
    }
}

--


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM