Предоставление ввода / подкоманд для команды, выполняемой через SSH с JSch

Я пытаюсь управлять маршрутизатором через приложение Java с помощью библиотеки Jcraft Jsch.

Я пытаюсь отправить конфигурацию маршрутизатора через 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'

Проблема в том, как я могу запустить эти последовательные команды.

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();
Другие вопросы по тегам