web-dev-qa-db-ja.com

「com.jcraft.jsch.JSchException:認証に失敗しました」、パスワードが機能している

サーバーにファイルをアップロードしようとすると、次の例外が発生します

    com.jcraft.jsch.JSchException: Auth fail
        at com.jcraft.jsch.Session.connect(Session.Java:464)
        at com.jcraft.jsch.Session.connect(Session.Java:158)
        at FtpService.transferFileToReciever(FtpService.Java:80)
        at FtpService.transferFileToReciever(FtpService.Java:54)
        at FtpService.transferFileToRecievers(FtpService.Java:44)
        at FtpService.transferSingeFile(FtpService.Java:241)
        at FtpService.main(FtpService.Java:26)
    Auth fail

ソースファイルのtransferFileToReciever関数の一部は

        JSch jsch = new JSch();
        jsch.addIdentity("/root/.ssh/id_dsa");
        Session session = jsch.getSession(username, Host, 22);

        session.setUserInfo(serverinfo);
        session.connect(); //geting exception here

        boolean ptimestamp = true;

私はsshを使用してログインできるため、パスワードは機能していますが、JSChを使用すると、キー、ユーザー名、およびパスワードが提供されていても機能しません。 Java version "1.6.0_25"でid_dsaキーを使用しています。エラーは何ですか?

他の同様の質問が見つかりましたが、答えはありません。前もって感謝します。

22
vinay

根本原因をトレースすると、タイプdsaの公開キーがリモートサーバーの認証キーに追加されていないことが最終的にわかりました。同じものを追加することは私のために働いた。

Sshはrsaキーで動作していたため、コードを振り返っていました。

みんな、ありがとう。

21
vinay

ユーザー名/パスワードに特殊文字が含まれている場合は、ラクダ構成内でRAWを使用して次のような値を構成します

  • RAW(se+re?t&23)ここで_se+re?t&23_は実際のパスワードです

  • RAW({abc.ftp.password})ここで、_{abc.ftp.password}_値は、スプリングプロパティファイルから取得されます。

RAWを使用して、問題を解決しました。

http://camel.Apache.org/how-do-i-configure-endpoints.html

3
Deepak Singla

例、リモートサーバーからファイルを取得してローカルマシンに保存する場合
パッケージコネクタ。

import Java.io.File;
import Java.io.FileNotFoundException;
import Java.io.FileOutputStream;
import Java.io.IOException;
import Java.io.InputStream;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class Main {

    public static void main(String[] args) throws JSchException, SftpException, IOException {
        // TODO Auto-generated method stub
        String username = "XXXXXX";
        String Host = "XXXXXX";
        String passwd = "XXXXXX";
        JSch conn = new JSch();
        Session session = null;
        session = conn.getSession(username, Host, 22);
        session.setPassword(passwd);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();

        ChannelSftp channel = null;
        channel = (ChannelSftp)session.openChannel("sftp");
        channel.connect();

        channel.cd("/tmp/qtmp");

        InputStream in = channel.get("testScp");
        String lf = "OBJECT_FILE";
        FileOutputStream tergetFile = new FileOutputStream(lf);

        int c;
        while ( (c= in.read()) != -1 ) {
            tergetFile.write(c);
        } 

        in.close();
        tergetFile.close();

        channel.disconnect();
        session.disconnect();   

    }

}
3

他の同様の質問が見つかりましたが、答えはありません。

この質問をどこで見つけたのかを知ることは興味深いものでした。

覚えている限りでは com.jcraft.jsch.JSchException:Auth cancel メソッド.addIdentity()にパスフレーズを追加してください。キーファイルなしでキーファイルを生成した場合は、""を使用できます。エラーの別の原因は指紋文字列です。一致しない場合は、認証エラーが発生します(ターゲットサーバーによって異なります)。

そしてついにここで私の作業ソースコード-私はい管理タスクを解決できた後:

public void connect(String Host, int port, 
                    String user, String pwd,
                    String privateKey, String fingerPrint,
                    String passPhrase
                  ) throws JSchException{
    JSch jsch = new JSch();

    String absoluteFilePathPrivatekey = "./";
    File tmpFileObject = new File(privateKey);
    if (tmpFileObject.exists() && tmpFileObject.isFile())
    {
      absoluteFilePathPrivatekey = tmpFileObject.getAbsolutePath();
    }

    jsch.addIdentity(absoluteFilePathPrivatekey, passPhrase);
    session = jsch.getSession(user, Host, port);

    //Password and fingerprint will be given via UserInfo interface.
    UserInfo ui = new UserInfoImpl(pwd, fingerPrint);
    session.setUserInfo(ui);

    session.connect();

    Channel channel = session.openChannel("sftp");
    channel.connect();
    c = (ChannelSftp) channel;
}
2
reporter

私も認証失敗の問題に直面しています、私のコードの問題は私が持っていることです

channelSftp.cd("");

に変更しました

channelSftp.cd(".");

その後、動作します。

2
Harry

次のように認証メソッドを明示的に追加してみてください。必要な場合があります。

session.setConfig("PreferredAuthentications", "password");
1
Amit Pawar

私の場合、以下の依存関係を使用していました

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.42</version>
</dependency> 

authの同じ例外を取得できませんでしたが、更新された依存関係を以下のバージョンと問題に解決しました。

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>
0
Pankaj