使用 JSch 为通过 SSH 执行的命令提供输入/子命令 [英] Providing input/subcommands to command executed over SSH with JSch

查看:40
本文介绍了使用 JSch 为通过 SSH 执行的命令提供输入/子命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to manage router via Java application using Jcraft Jsch library.

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

I'm trying to send Router Config via TFTP server. The problem is in my Java code because this works with PuTTY.

这是我的 Java 代码:

This my Java code:

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();

我明白

行有一个无效的自动命令'192.168.50.1'

Line has an invalid autocommand '192.168.50.1'

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

The problem is how can I run those successive commands.

推荐答案

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

即使有,我猜 192.168.50.1 : Config.txt 不是命令,而是 复制运行的输入tftp : 命令,不是吗?

And even if it had, I'd guess that the 192.168.50.1 : and Config.txt are not commands, but inputs to the copy run tftp : command, aren't they?

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

If that's the case, you need to write them to the command input.

像这样:

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


一般来说,检查命令是否具有更好的API"总是更好.而不是输入要输入的命令.命令通常具有命令行参数/开关,可以更好地满足预期目的.

一个相关的问题:使用 JSch 分别为各个提示提供输入.

这篇关于使用 JSch 为通过 SSH 执行的命令提供输入/子命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆