1

Jsch Shell チャネルを使用して Windows XP でコマンドを実行しようとしていますが、何らかの理由で System.out ストリームに奇妙なシンボルが表示され、コマンドを実行できません。接続に使用するコードは次のとおりです。

this.session = jsch.getSession(this.login, this.host);

Properties properties = new Properties();
properties.put("StrictHostKeyChecking", "no");
session.setPassword(this.password);
session.setConfig(properties);

session.connect(30000);


channel =(ChannelShell) session.openChannel("shell");


PipedInputStream pip = new PipedInputStream(40);
channel.setInputStream(pip);
channel.setOutputStream(System.out);

PipedOutputStream pop = new PipedOutputStream(pip);
print = new PrintStream(pop); 
channel.connect();

次に、次のメッセージが表示されます。

[1;1HMicrosoft Windows XP [Versi�n 5.1.2600][2;1H(C) Copyright 1985-2001 Microsoft Corp.[4;1HC:\Documents and Settings\diego\Escritorio>[4;44H

そして、cd C:\MyFolder\ を呼び出そうとすると、別のコマンド (すべて ssh クライアントからテストされ、機能します) を呼び出すと、さらに奇妙なシンボルが生成され、コマンドの結果が得られません。何が問題なのですか? 以下は、私が送信したコマンドと結果です。

exec.print.println("cd C:\\MyFolder\\");
exec.print.println("some other command");

結果:

[1;1HMicrosoft Windows XP [Versi�n 5.1.2600][2;1H(C) Copyright 1985-2001 Microsoft Corp.[4;1HC:\Documents and Settings\diego\Escritorio>[4;44H[4;1HC:\Documents and Settings\diego\Escritorio>c[4;58H[4;1HC:\Documents and Settings\diego\Escritorio>cd C:\MyFolder\[4;58H[4;46H[4;58H[4;47H[4;58H[4;48H[4;58H[4;49H[4;58H[4;50H[4;58H[4;51H[4;58H[4;52H[4;58H[4;53H[4;58H[4;54H[4;58H[4;55H[4;58H[4;56H[4;58H[4;57H[4;58H

Windows XP で FreeSShd を使用しており、プログラムは Ubuntu で実行されます。コンソールで ssh を使用し、Windows XP で動作します。Java プログラムに実装しようとしています。助けてくれてありがとう。

4

2 に答える 2

1

直接sshを試しましたか?ダイレクト ssh が機能する場合、その jsch. Linux ベースの ssh サーバーで jsch を試してください。jsch が機能する場合は、FreeSshd の問題です。

于 2012-12-17T22:48:00.873 に答える
1

これは、エンコーディングの問題と、端末エミュレーションの欠如です。

[1;1HSSH デーモンは、端末制御シーケンス (実際には文字が先行する文字列)を理解するデバイスと通信することを想定していますESC。プログラムは端末エミュレーションを提供しないため、生のエスケープ シーケンスが表示されます。

ひし形/疑問符の文字は、使用しているフォントにサーバーから送信された文字が含まれていないことを示します。この場合、アクセント付きの文字である可能性があります。

于 2012-12-17T06:39:08.863 に答える