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

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

我正在尝试通过TFTP服务器发送Router Config。 问题出在我的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有一个无效的自动命令’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();