1

ネットワーク内のルーターにアクセスするために Jsch lib を使用していますが、一部のルーターはログイン バナーです。したがって、出力を読み取り、バナーを特定し、それを削除して、コマンドの出力のみを取得する必要があります。exec モードでチャネルを使用しています。私が考えた解決策の 1 つは、">" や "#" など、プロンプトの最後の文字を取得することでしたが、exec モードでは、コマンドの出力を取得するだけです。

4

1 に答える 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 に答える