Выполнение команды linux suu из Java - после запуска команды suu не удалось запустить другие команды - PullRequest
0 голосов
/ 04 мая 2020

После запуска сценария ниже java -

suu -t -r "reason" <user_name>

Он запросил у меня пароль, и я ввел его. После этого программа работала, но не выполняла никаких дальнейших команд.

Я хочу выдать себя за Linux машину через Java (библиотека Jsch). Я не получаю никаких ошибок, но после того, как пароль задан, он успешно входит в систему, а затем никакие команды не выполняются.

Это ссылка, по которой я следовал, чтобы написать код - https://linuxconfig.org/executing-commands-on-a-remote-machine-from-java-with-jsch

После запуска команды suu я хочу прочитать файл. Без запуска suu у меня не будет доступа к этому пути. Любая помощь по этой проблеме будет более ценной:)

Вот мой фрагмент - [! [Введите описание изображения здесь] [1]] [1]

Заранее спасибо!

Ниже приведен код, который я использовал -

public class SSHConn {

static Session session;
static String suCmds = "suu -t -u \"reason\" simba";
static String[] commands = {"whoami", suCmds};

public static void main(String[] args) throws Exception {
    open();
    runCmd(commands);
    close();
}

public static void runCmd(String[] commands) throws JSchException, IOException {
    for (String cmd : commands) {
        System.out.println("\nExecuting command: " + cmd);
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(cmd);
        InputStream in = channel.getInputStream();
        OutputStream out = channel.getOutputStream();
        channel.connect();
        //passing creds only when you switch user
        if (cmd.startsWith("suu -")) {
            System.out.println("Setting suPasswd now....");
            out.write((Constants.suPasswd + "\n").getBytes());
            out.flush();
            System.out.println("Flushed suPasswd to cli...");
        }
        captureCmdOutput(in, channel);
        channel.setInputStream(null);
        channel.disconnect();
    }
}

public static void captureCmdOutput(InputStream in, Channel channel) throws IOException {
    System.out.println("Capturing cmdOutput now...");
    byte[] tmp = new byte[1024];
    while (true) {
        while (in.available() > 0) {
            int i = in.read(tmp, 0, 1024);
            if (i < 0) {
                break;
            }
            System.out.print(new String(tmp, 0, i));
        }
        if (channel.isClosed()) {
            break;
        }
        try {
            Thread.sleep(1000);
        } catch (Exception ee) {
            System.out.println(ee.getMessage());
        }
    }
}

public static void open() throws JSchException {
    JSch jSch = new JSch();
    session = jSch.getSession(Constants.userId, Constants.host, 22);
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.setPassword(Constants.userPasswd);
    System.out.println("Connecting SSH to " + Constants.host + " - Please wait for few seconds... ");
    session.connect();
    System.out.println("Connected!\n");
}

public static void close() {
    session.disconnect();
    System.out.println("\nDisconnected channel and session");
}}
...