Java Jsch移除路由器';s登录横幅
我使用Jsch lib访问网络中的路由器,但在某些路由器中有登录横幅。因此,我需要读取输出,识别横幅,删除它,然后只获取命令的输出。我正在exec模式下使用通道。我认为一种解决方案是获取提示符的最后一个字符,如“>”或“#”,但在exec模式下,我只获取命令的输出。很抱歉,我这么做晚了很多年,但我只是自己解决了这个问题 如果您注意到,会话有一个方法setUserInfo(myUserInfo) UserInfo是一个抽象类。shell会话使用“showMessage(Str msg)”方法显示横幅 由于您使用的是Exec会话,Exec会话仍然调用showMessage(),因此我所做的是扩展UserInfo并添加我自己的getMessage(),使用showMessage(Str msg)设置我的“String messageVar” MyUserInfo是我扩展的JSCH示例之一中的一个类。这是我的用户信息:Java Jsch移除路由器';s登录横幅,java,ssh,jsch,Java,Ssh,Jsch,我使用Jsch lib访问网络中的路由器,但在某些路由器中有登录横幅。因此,我需要读取输出,识别横幅,删除它,然后只获取命令的输出。我正在exec模式下使用通道。我认为一种解决方案是获取提示符的最后一个字符,如“>”或“#”,但在exec模式下,我只获取命令的输出。很抱歉,我这么做晚了很多年,但我只是自己解决了这个问题 如果您注意到,会话有一个方法setUserInfo(myUserInfo) UserInfo是一个抽象类。shell会话使用“showMessage(Str msg)”方法显示横
public static abstract class MyUserInfo
implements UserInfo, UIKeyboardInteractive {
public String getPassword() {
return null;
}
public boolean promptYesNo(String str) {
return false;
}
public String getPassphrase() {
return null;
}
public boolean promptPassphrase(String message) {
return false;
}
@Override
public boolean promptPassword(String message) {
return false;
}
@Override
public void showMessage(String message) {
}
public abstract String getMessage();
public String[] promptKeyboardInteractive(String destination,
String name,
String instruction,
String[] prompt,
boolean[] echo) {
return null;
}
}
这是我的分机
public class UI extends MyUserInfo{
String message;
@Override
public void showMessage(String message) {
this.message=message;
super.showMessage(message); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getMessage() {
return this.message;
}
}
以下是您如何使用这一切:
session.setUserInfo(new UI());
session.connect();
((UI)session.getUserInfo()).getMessage() 我想到了一个解决这个问题的方法:发送一个空白命令,这样输出的就是横幅,获取横幅的长度并将其放入一个变量中。这项工作很好,但如果有人得到另一个解决方案,请展示它。谢谢。我想这是该走的路。如果“登录横幅”在执行命令之前由远程shell发送,则客户端无法安全地对其进行分隔。你能给出一个详细的答案吗?