3

私はJschを初めて使用し、sftpを介してサードパーティに接続しようとしています。ssh経由で接続できるので、適切なユーザー、ホスト、ポート、秘密鍵ファイルがあることがわかりますが、Jsch経由で接続しようとすると、「Authfailed」という例外メッセージが表示されます。これが私がオンラインの例からつなぎ合わせた私のコードです:

String pvtkey = "{unixpath}/id_dsa";
ChannelSftp sftp = null;
JSch jsch = new JSch();
Session session = null;

try {
    jsch.setKnownHosts("{unixpath}/known_hosts");
    jsch.addIdentity(pvtkey);
    session = jsch.getSession(user, connectionURL, 22);
    Properties config = new Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.connect();
    // ...some other code that never gets called
} catch (JSchException e) {
    log.info(e.getMessage());
    log.error(e.getCause());
}

いくつかのログを追加したので、session.connect()として失敗が発生していることがわかります。ユーザーとconnectionURLを取得し、それらが正しく渡されていることを確認しました。pvtkeyとknown_hostsへのパスは、キーとホストファイルを保持する場所への完全なUNIXパスであり、このプロセスを開始するスクリプトを保持するディレクトリに移動しました。私はまだsftpに少し慣れていませんが、公開鍵をJsch接続に追加していなくても、同じディレクトリにある必要がありますか?私の失敗に関するより多くの情報を得る方法はありますか?

4

3 に答える 3

0

あなたが使用しているので

config.put("StrictHostKeyChecking", "no");

キーファイルは必要ありません。ホストキーのチェックを無効にします。プログラムを実行した後のログの内容を教えてください。

于 2013-01-03T08:23:41.633 に答える
0

はい、公開鍵認証を使用している場合、JSch は.pub、パラメーターとして に渡した秘密鍵ファイルと同じディレクトリ (および を追加した同じ名前) にある公開鍵ファイルを想定していますaddIdentity()または、両方のファイル名をパラメーターとして受け取るメソッド バリアントを使用するか、それらをバイト配列として渡すことができます。

その理由は、SSH 公開鍵認証プロトコルでは、クライアントが最初に利用可能な公開鍵のリストをサーバーに送信し、サーバーがこれらから適切なものを選択するためです。その後、秘密鍵が必要になります (復号化され、必要であれば)。(アルゴリズムと鍵の表現に応じて) 秘密鍵から公開鍵を計算することは可能かもしれませんが、JSch 自体はこれを行わないため、両方の鍵を提供する必要があります。

于 2012-06-09T18:34:17.503 に答える