如何使用String输入而不是控制台从shell-channel运行Jsch多个命令

问题描述 投票:0回答:1

我正在使用JSch库编写程序,并且必须打开shell通道并执行存储在String中的一些命令。 我需要从String变量而不是控制台提供输入命令。 我遇到过Jsch : Command Output unavailable的帖子 在给出的代码中,它适用于像pwdwhoami等命令,但是当我试图做一个sudo -u hiveuser -i时它会挂起。 这是代码:

public static void main(String[] args) throws Exception
    {   
        JSch jsch = new JSch();
        String host = "my.host.server";
        String user = "myLoginId";
        String pswd = "myPASSword";

        Session session=jsch.getSession(user,host, 22);
        session.setPassword(pswd);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");
        session.connect();
        System.out.println("Connected");

        Channel channel = session.openChannel("shell");
        OutputStream ops = channel.getOutputStream();
        PrintStream ps = new PrintStream(ops);
        channel.connect();
        ps.println("sudo -iu hiveuser");
        ps.println(pswd);
        ps.println("hive");
        ps.println("desc table myHiveTable;");
        ps.flush();
        ps.close();

        InputStream in = channel.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        System.out.println("Opening...");

        String jarOutput;
        while ((jarOutput = reader.readLine()) != null)
            System.out.println(jarOutput);
        reader.close();
        channel.disconnect();
        session.disconnect();

    }
java jsch
1个回答
0
投票

您可以尝试在密码中回显:

echo password | sudo -iu hiveuser --stdin
© www.soinside.com 2019 - 2024. All rights reserved.