JSCHを使用してSSHサーバからのコマンド出力を読み込むときに、不要な文字を取得します

共同つもり:

私は、リモートサーバーのSSHサーバに接続すると、私は、パス内のファイルの一覧を取得することができています特定のパスにあるファイルの一覧を取得する取得しようとしているが、彼らは判読できない形式にあったのですできたこの上の任意の1つのヘルプ

String host="xxxxx.yyyy.com";
String user="user";
String password="password";
String command1="dzdo su - lucy";
try{    
    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no");
    JSch jsch = new JSch();
    Session session=jsch.getSession(user, host, 22);
    session.setPassword(password);
    session.setConfig(config);
    session.connect();
    System.out.println("Connected");

    Channel channel=session.openChannel("shell");
    OutputStream ops = channel.getOutputStream();
    PrintStream ps = new PrintStream(ops, true);

    channel.connect();
    ps.println(command1);
    ps.println("ls -ltr");
    InputStream in=channel.getInputStream();
    byte[] tmp=new byte[1024];
    while(true){
        while(in.available()>0){
            int i=in.read(tmp, 0, 1024);
            if(i<0)break;
            System.out.print(new String(tmp, 0, i));
        }
        if(channel.isClosed()){
            System.out.println("exit-status: "+channel.getExitStatus());
            break;
        }
        try{Thread.sleep(1000);}catch(Exception ee){}
    }
    channel.disconnect();
    session.disconnect();
    System.out.println("DONE");

ここでは、コンソール出力があります

drwxrws---. 2 gleaiid gleai 4096 Jan 21  2016 [0m[01;34mold[0m
-rwxrws---. 1 jhon gleai  100 Jul 20  2017 [30;43mNVISAP_814_Test.txt[0m
-rwxrws---. 1 jhon  gleai  134 Jul 20  2017 [30;43mUS_NISC14_4164556_Test.txt[0m
-rwxrws---. 1 jhon  gleai    0 Jul 20  2017 [30;43mNVISAP_R00814_Test.trg[0m
マーティンPrikryl:

これらは、ANSIエスケープコード通常かなり[カラー]出力を印刷するために、端末クライアントにより解釈されます。

サーバーが正しく設定されている場合は、対話型端末を使用する場合、あなたは、これらのみを取得します。言い換えれば、あなたが要求した場合に疑似端末をセッションのために(何がいけない、あなたがセッションを自動化している場合)。

あなたが対話型端末を実現するために使用されることを想定しているものとして、「シェル」チャンネルを、使用している場合JSCHは自動的に、疑似端末を要求します。

  • あなたは、リモートコマンドの実行を自動化する場合は、より良いに示すように、「実行」チャネルを使用JSCHのExec.java

  • また、あなたは呼び出すことで疑似端末を要求してからJSCHを防ぐことができますsetPtyしかし、私は、「シェル」のチャンネルを使用することはお勧めしません。あなたは、どのような理由のために、あなたが呼び出す必要がありますする必要がある場合けれどもsetPty(false)それは他の多くの同様のトラブルを防ぐことができますよう、どのような場合に。私は実際にはすでにあなたにそれをお勧めします、あなたの前の質問


他の人への注意:OPの用途は、なぜ、私が見ている間lsコマンド、一般的に、1は、使用使用する必要があるディレクトリ一覧を取得するために、SFTP APIを代わりに実行するので、lsその出力を解析します。構文解析lsの出力はかなり信頼性のないアプローチです。


関連質問:

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=187585&siteId=1