【发布时间】: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 个输入才能登录)。
-
哪三个输入?你的意思是需要依次执行三个命令?
-
是的。程序提示用户输入用户名、域和密码。执行一个命令并关闭通道是不行的。