1

JSch を使用し、ssh を介してリモート マシンに接続してコマンド ライン操作を実行するアプリケーションの開発に多くの時間を費やしました。ただし、これらの操作はローカルホストでも実行できることがわかりました (私のアプリはローカルホストで実行されています)。今...私は怠惰すぎてすべてのコードを書き直すことができず、JSchに本当に愛着を持っていたので正直気分が悪いです。代わりに JSch をだまして localhost に接続させる方法はありますか、または何らかの方法で localhost を使用するように指示する方法はありますか? :)

PSそれが不可能な場合に備えて、通常の Process クラスは JSch のように setOutputStream と setErrStream をサポートしていませんが、getInputStream と getErrorStream のみをサポートしているのはなぜですか??

4

1 に答える 1

6

ローカル マシンで SSH サーバーが実行されている (そしてアプリケーションに必要なログイン資格情報がある) 限り、JSch を使用してローカル マシンに接続することもできます。接続のホスト名としてlocalhost(または) を指定するだけです。127.0.0.1

ただし、すべてのデータを暗号化および復号化しているため、これにはオーバーヘッドが発生します。これは、一部のコマンドをローカルで実行するために実際には必要ありません。(一方、これにより、別のユーザーとしてコマンドを実行できるようになります。そうしないと、 Windows では、 またはsudoのようなものが必要になります。)suRunAs

JSchは、対応するメソッドの上にsetOutputStreamandを実装します。これは、内部で PipedInputStream に似たものを使用し、それらのストリーム間でデータをシャベルする別のスレッドを使用します。setErrStreamget...

JSch はオープン ソースであるため、これがどのように行われるか (Channel私の記憶が正しければクラス内) を確認し、関連するメソッドをクラスにコピーして、Process.

JSch にデータを暗号化しないように指示する方法はありますか?

none暗号を使用できます。たとえば、暗号化は使用できません。これは、すべての汎用クライアントおよびサーバーでデフォルトで無効になっています (SSH の目的の半分を無効にするため) が、適切な構成で有効にすることができます。JSchでは使用できます

session.setConfig("cipher.s2c", "none,...");  // server to client
session.setConfig("cipher.c2s", "none,...");  // client to server

(この構成オプションは、クライアントがサポートするすべてのオプションのリストです。サポートされているすべての値については、のドキュメントをsetConfig参照してください。サーバーは通常、このリストの中でサポートされている最初のオプションを選択します。暗号化を強制しない (または接続をキャンセルする) には、リストのみnone。)

SSH サーバーでこれを有効にする方法がわかりません。サーバーのドキュメントを読んでください。(可能であれば、localhost に対してのみ有効にします。)

推奨される使用方法は、認証後にのみ暗号化に切り替えることですnone(したがって、認証はまだ暗号化されています) が、localhost の場合、これは必要ない場合があります。(session.rekey()構成を変更した後、暗号 (およびキー) を切り替えるために使用できます。)

于 2011-08-18T13:28:27.447 に答える