当前位置: 首页 > 知识库问答 >
问题:

如何使用字符串输入而不是控制台从shell通道运行Jsch多个命令

柯立果
2023-03-14

我正在使用JSch库编写一个程序,必须打开一个shell通道,执行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个答案

长孙阳嘉
2023-03-14

您可以尝试输入密码:

echo password | sudo -iu hiveuser --stdin
 类似资料:
  • 问题内容: 我正在使用JSCH -SSH库在“ shell”通道中执行命令,但找不到找到两种方法的方法: 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印它? 下面是我的代码片段,可以在system.out上显示shell命令输出 注意:我不想使用“ exec”通道,因为它为每个命令启动一个新进程,并且不记得已导

  • 基本上,我有一个java程序,它使用JSch SSH库来控制两个不同的SSH连接。 我创建了一个名为SSHConnection的类,它是JSch库的包装器,并通过调用如下所示的构造函数初始化了两个副本: 但是,我发现,如果我已经打开了一个使用SHELL通道的会话,当我试图为第二个会话打开第一个通道时,我会得到一个错误,即“channel is not opened”(JSch异常)。 有没有一种方

  • 问题内容: 我正在尝试使用JSch从Android使用SSH在Linux服务器上执行命令。 据我所知,我正在连接到服务器,但是当我尝试检索命令的结果时,却什么也没得到。 连接到服务器: 检索数据: 我在这里想念什么? 问题答案: 在启动命令之后,在返回任何输出之前,您将立即断开连接。 您必须等待“ exec”通道关闭(命令完成后它将关闭)。 有关“ exec”通道的信息, 请参见官方JSch示例。

  • null 到目前为止,我在cmd中的输入是: d: CD JavaProgram javac snake.java board.java 从这里我该怎么办? 这是指向这2个java文件源代码的链接。http://zetcode.com/tutorials/javagameStutorial/snake/

  • 问题内容: 我想在其中运行一些命令并处理输出。我曾经用过,但是对于某些命令,例如,它没有给出正确的输出。对于该命令,我的程序没有给出任何输出,但给出了错误提示。但是,同一命令在命令提示符下给出正确的输出。 还有其他方法可以执行包含Java通配符的命令吗? 问题答案: 还有其他方法可以执行包含Java通配符的命令吗? 就在这里。 您的代码中存在三个潜在的问题: 假设您想查看外部命令的输出,则需要照顾