jsch 交互式执行命令示例

import com.jcraft.jsch.*;

import java.io.InputStream;
import java.io.OutputStream;

public class SuRootTest {

    public static final int SESSION_TIMEOUT = 60000;

    public static final int CHANNEL_TIMEOUT = 60*20*1000;

    public static void main(String[] args) throws Exception {
        String host = "192.168.1.128";
        String user = "test";
        String password = "123456";

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, 22);
            session.setTimeout(SESSION_TIMEOUT);
            session.setPassword(password);

            // Disable strict host key checking
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            session.connect();

            Channel channel = session.openChannel("shell");
            channel.connect(CHANNEL_TIMEOUT);

            InputStream inputStream = channel.getInputStream();
            OutputStream outputStream = channel.getOutputStream();

            // Send commands
            sendCommand(outputStream, "ls -lh");
            // Read the output
            readOutput(inputStream);
            sendCommand(outputStream, "whoami");

            // Read the output
            readOutput(inputStream);
            sendCommand(outputStream, "sudo su - root");

            // Read the output
            readOutput(inputStream);
            sendCommand(outputStream, "123456");

            // Read the output
            readOutput(inputStream);
            sendCommand(outputStream, "whoami");

            // Read the output
            readOutput(inputStream);
            sendCommand(outputStream, "ls -lh");

            // Read the output
            readOutput(inputStream);

            channel.disconnect();
            session.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void sendCommand(OutputStream outputStream, String command) throws Exception {
        outputStream.write((command + "\n").getBytes());
        outputStream.flush();
        Thread.sleep(1000); // Wait for command to execute (adjust as needed)
    }

    private static void readOutput(InputStream inputStream) throws Exception {
        byte[] buffer = new byte[1024];
        int bytesRead;

        while (inputStream.available() > 0 && (bytesRead = inputStream.read(buffer)) > 0) {
            System.out.print(new String(buffer, 0, bytesRead));
        }
    }
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值