我已成功使用JSch库创建与服务器的SSH连接,但我无法弄清楚如何将子系统NETCONF添加到SSH连接。
手动执行此操作时,与sybsystem NETCONF建立SSH连接的命令行为ssh -p 4444 nerconf@myserver -s netconf
。
如何使用JSch将选项-s netconf
添加到SSH连接? JSch是否支持NETCONF的子系统?
答案 0 :(得分:1)
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,子系统必须满足的唯一要求是正确的子系统名称。
答案 1 :(得分:-3)
谢谢,predi。
这对我有用。 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