Как использовать JSch для установки SSH-соединения с подсистемой NETCONF

Я успешно использовал библиотеку JSch для создания SSH-соединения с сервером, но мне трудно понять, как добавить подсистему NETCONF в SSH-соединение.

При выполнении этого вручную командная строка, которая устанавливает SSH-соединение с подсистемой NETCONF, имеет вид ssh -p 4444 nerconf@myserver -s netconf.

Как добавить параметр -s netconf к SSH-соединению с помощью JSch? Поддерживает ли JSch подсистему для NETCONF?


person Dang Thien Nguyen    schedule 21.03.2018    source источник


Ответы (2)


JSch поддерживает подсистемы SSH в целом, но не реализует ничего специфичного для NETCONF (это не обязательно).

Все, что вам нужно сделать, это сделать следующие вызовы (псевдокод):

com.jcraft.jsch.JSch ssh = new com.jcraft.jsch.JSch();

com.jcraft.jsch.Session session = ssh.getSession(username, host, port);

session.setUserInfo(myUserInfo); // authentication

session.connect(connectTimeout);

// this opens up the proper subsystem for NETCONF
com.jcraft.jsch.ChannelSubsystem subsystem = (com.jcraft.jsch.ChannelSubsystem) session.openChannel("subsystem");
subsystem.setSubsystem("netconf");

// at this point you may get your streams
subsystem.getInputStream();
subsystem.getErrStream();
subsystem.getOutputStream();

subsystem.connect();

Для NETCONF единственным требованием, которое должна выполнять подсистема, является правильное имя подсистемы.

person predi    schedule 21.03.2018

Спасибо, преди.

Это работа для меня. netconf-hello готово.

session = new JSch().getSession("username", "remote-ip", netconf-port);
session.setPassword("your-password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

channel = (ChannelSubsystem) session.openChannel("subsystem"); //necessary
channel.setSubsystem("netconf"); //necessary
channel.connect();
System.out.println(channel.isConnected()); // debug use
System.out.println(session.isConnected()); // debug use


InputStream inputStream = channel.getInputStream(); // use this to read
OutputStream outputStream = channel.getOutputStream();
PrintStream printStream = new PrintStream(outputStream); // use this to send
person Jianwei Mao    schedule 18.03.2021
comment
Это тот же код, который @predi уже опубликовал. + Никогда и никому не предлагайте установить StrictHostKeyChecking=no, не объяснив последствия для безопасности! - person Martin Prikryl; 20.03.2021