【问题标题】:Removing shell stuff (like prompts) from command output in JSch从 JSch 的命令输出中删除 shell 内容(如提示)
【发布时间】:2017-03-01 18:04:19
【问题描述】:

我已经成功地通过 SSH 连接到一个节点,发送了输入,并检索了输出。输入一行后,该行打印到控制台,然后是一个空行,然后输出打印两次。我不希望输入在输入后打印到控制台,也不希望空行,也不希望第二次打印输出。下面是我的代码

public void runSession() {
    try {
        Channel channel = session.openChannel("shell");
        channel.setInputStream(System.in, true);
        channel.setOutputStream(System.out, true);
        channel.connect(defaultChannelTimeout);

        while (channel.getExitStatus() == -1) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }

        channel.disconnect();
    } catch(JSchException jschEx) {
        System.out.println("JSch exception during I/O");
        System.out.println(jschEx.getMessage());
    }
}

这是控制台运行时的样子

user:domain@node:/a/b/c> cd ..

cd ..

用户:域@节点:/a/b> 用户:域@节点:/a/b>

如您所见,存在问题:

  • “cd..”单独打印在控制台的一行上
  • “cd..”后出现一个空行
  • “user:domain@node:/a/b>”行打印了两次。

有谁知道如何从控制台中删除这 3 个项目?期望的输出是

user:domain@node:/a/b/c> cd..

用户:域@节点:/a/b>

【问题讨论】:

  • 您实际实施的是什么?你为什么使用“shell”频道?
  • 我需要保持通道打开以从 shell 登录另一个程序,该程序允许用户查询/插入/更新数据库中的数据。使用“exec”将在每个命令后关闭通道,用户将永远无法登录(需要 3 个输入才能登录)。
  • 哪三个输入?你的意思是需要依次执行三个命令?
  • 是的。程序提示用户输入用户名、域和密码。执行一个命令并关闭通道是不行的。

标签: java shell ssh jsch


【解决方案1】:

这些都是“shell”通道的后果。

您运行一个交互式会话,其中包含人类用户喜欢的所有花哨的东西。

“shell”通道不适用于自动化。

您可以通过在channel.connect() 之前调用channel.setPty(false) 来删除其中的一些。


虽然你最好使用“exec”频道。

这可能有效:

( echo username & echo password & echo hostname ) | command

相关问题:

【讨论】:

  • 不走运。另外,我不是在寻找自动化。我希望用户能够输入他们自己的信息、查询等,这就是我选择实现“shell”通道而不是“exec”通道的原因。
  • “运气不好”是什么? setPty 还是“exec”通道?使用“exec”通道的方法不会阻止您提示用户输入信息。只需提示输入信息并使用输入的数据组装命令。
  • 使用 setPty,没有输出输出到控制台(没有收到“user:domain@node:/a/b>”的提示)。使用 exec 通道,用户无法提供输入来执行多个命令,除非我之前提示输入命令,将它们存储在列表中,并执行存储在列表中的每个命令。这根本不是我想要实现的。我希望频道保持打开状态并让频道本身接受用户输入。
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多