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

时间:2017-12-21 14:00:19

标签: java jsch

我正在使用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();

    }

1 个答案:

答案 0 :(得分:0)

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

echo password | sudo -iu hiveuser --stdin