我了解如何创建 ssh shell
Shell ssh = new SshByPassword("192.168.1.5", 22, "admin", "password");
我也了解如何运行命令
String output = new Shell.Plain(ssh).exec("some command");
我可以轻松分析输出字符串
但是我如何一个接一个地发送相同的“shell”命令
和奖励问题有时命令需要用户确认(“按 Y 继续”)
图书馆可以吗?
通常,大多数 Java SSH API 留给开发人员来解决在 shell 中执行多个命令的复杂性。这是一个复杂的问题,因为 SSH 不提供任何指示命令在 shell 中的开始和结束位置;该协议仅提供数据流,即 shell 的原始输出。
我想介绍一下我的项目Maverick Synergy。为交互式 shell 提供接口的开源 API (LGPL)。我在一篇文章中记录了交互式命令的选项。
这是一个非常基本的例子,ExpectShell 类允许你执行多个命令,每次返回一个封装了命令输出的 ShellProcess。您可以使用 ShellProcess InputStream 读取输出,当命令完成时它将返回 EOF。
如本例所示,您还可以使用 ShellProcessController 与命令交互。
SshClient ssh = new SshClient("localhost", 22, "lee", "xxxxxx".toCharArray());
ssh.runTask(new ShellTask(ssh) {
protected void onOpenSession(SessionChannelNG session)
throws IOException, SshException, ShellTimeoutException {
ExpectShell shell = new ExpectShell(this);
// Execute the first command
ShellProcess process = shell.executeCommand("ls -l");
process.drain();
String output = process.getCommandOutput();
// After processing output execute another
ShellProcessController controller =
new ShellProcessController(
shell.executeCommand("rm -i file.txt"));
if(controller.expect("remove")) {
controller.typeAndReturn("y");
}
controller.getProcess().drain();
}
});
ssh.disconnect();