java - 为使用 JSch 通过 SSH 执行的命令提供输入/子命令

标签 java ssh router jsch cisco

我正在尝试使用 Jcraft Jsch 库通过 Java 应用程序管理路由器。

我正在尝试通过 TFTP 服务器发送路由器配置。问题出在我的 Java 代码中,因为它适用于 PuTTY。

这是我的 Java 代码:

int port=22;
String name ="R1";
String ip ="192.168.18.100";
String password ="root";

JSch jsch = new JSch();
Session session = jsch.getSession(name, ip, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");

ChannelExec channelExec = (ChannelExec)session.openChannel("exec");

InputStream in = channelExec.getInputStream();
channelExec.setCommand("enable");

channelExec.setCommand("copy run tftp : ");
//Setting the ip of TFTP server 
channelExec.setCommand("192.168.50.1 : ");
// Setting the name of file
channelExec.setCommand("Config.txt ");

channelExec.connect();

BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
int index = 0;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
    System.out.println(line);
}
session.disconnect();

我明白了

Line has an invalid autocommand '192.168.50.1'

问题是我如何运行这些连续的命令。

最佳答案

调用ChannelExec.setCommand多次没有效果。

即使有,我猜192.168.50.1 : Config.txt 不是命令,而是 copy run tftp : 的输入命令,不是吗?

如果是这种情况,您需要将它们写入命令输入。

类似这样的事情:

ChannelExec channel = (ChannelExec) session.openChannel("exec");
channelExec.setCommand("copy run tftp : ");
OutputStream out = channelExec.getOutputStream();
channelExec.connect();
out.write(("192.168.50.1 : \n").getBytes());
out.write(("Config.txt \n").getBytes());
out.flush();

一般来说,检查命令是否具有更好的“API”总是比将命令提供给输入更好。命令通常具有命令行参数/开关,可以更好地达到预期目的。


相关问题:Provide inputs to individual prompts separately with JSch

关于java - 为使用 JSch 通过 SSH 执行的命令提供输入/子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997422/

相关文章:

c# - 如何在 WPF 中模拟控制台?

go - 检查网络连接

javascript - 带有参数导航返回的 React Router 需要双击

java - 带千位分隔符的 BigDecimal 字符串格式 (###.###,##)

Eclipse:如何使用 key 文件通过 ssh 克隆 git?

java - 如何立即返回 String Builder 对象作为 rdd ?或者将 String Builder 对象转换为 rdd?

Angular 2 : Nested Observables in Guard

javascript - react 路由器升级与路由器冲突

java - 如何在java中从 double 组创建char数组?

java - Android 和 Java 中的 TimeZone.getAvailableIDs