猿问

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

我正在尝试使用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();

我懂了


该行具有无效的自动命令“ 192.168.50.1”


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


繁花如伊
浏览 613回答 1
1回答

慕哥9229398

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();
随时随地看视频慕课网APP

相关分类

Java
我要回答