ネットワーク内のルーターにアクセスするために Jsch lib を使用していますが、一部のルーターはログイン バナーです。したがって、出力を読み取り、バナーを特定し、それを削除して、コマンドの出力のみを取得する必要があります。exec モードでチャネルを使用しています。私が考えた解決策の 1 つは、">" や "#" など、プロンプトの最後の文字を取得することでしたが、exec モードでは、コマンドの出力を取得するだけです。
1 に答える
0
申し訳ありませんが、これに何年も遅れていますが、自分で問題を解決しました。
セッションには setUserInfo(myUserInfo); メソッドがあります。
UserInfo は抽象クラスです。シェル セッションは、'showMessage(Str msg)' メソッドを使用してバナーを表示します。
Exec セッションを使用しているため、exec セッションは引き続き showMessage() を呼び出すため、UserInfo を拡張し、独自の getMessage() を追加し、showMessage(Str msg) を使用して「String messageVar」を設定しました。
MyUserInfo は、私が拡張した JSCH Examples の 1 つのクラスです。MyUserInfo は次のとおりです。
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();
于 2015-04-29T15:23:01.260 に答える