web-dev-qa-db-ja.com

com.jcraft.jsch.JSchException:認証キャンセル

ポートトンネリングを介してURLを取得するAntスクリプトを記述しようとしています。

パスワード(プライバシーのためにxxxxにした名前)を使用するとうまくいきます。

<project default="main">
  <target name="main">
    <sshsession Host="xxxx"
    username="xxxx"
    password="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>
  </target>
</project>

しかし、次のようにキーファイルを使用すると機能しません。

    <sshsession Host="xxxx"
    username="xxxx"
    keyfile="/Users/xxxx/.ssh/id_dsa"
    passphrase="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>

私はこの例外を受け取ります:

/tmp/build.xml:8: com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.Java:451)
    at com.jcraft.jsch.Session.connect(Session.Java:150)
    at org.Apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.Java:223)
  • 正しいキーファイルを使用していると確信しています(正当なFileNotFoundExceptionを与える、間違った名前を使用しようとしました)。
  • パスワードの入力を求められることなく、コマンドラインからsshを正常に実行できます。
  • キーファイルに正しいパスフレーズを使用していると確信しています。

このエラーの原因は何ですか?それに対して何ができますか?

20
Dan Fabulich

コードをデバッグしました。私の秘密鍵が認証に失敗したため、これは失敗しました。 JSchは静かにパスワード認証にフォールバックしましたが、パスワードを指定しなかったためキャンセルされました。

JSchのエラー処理は非常に困難です。手順をたどって、(個別の)秘密鍵ファイルを再生成し、ssh -iを使用して正しいファイルを使用していることを確認し、指を交差させます。

36
Dan Fabulich

jsch接続を機能させるには、known_hostsファイルと秘密鍵を含むファイルの両方へのパスを指定する必要があります。これは、setKnownHostsおよびaddIdentityメソッドを使用して行われます。

        jsch.setKnownHosts("/path/to/.ssh/known_hosts");
        jsch.addIdentity("/path/to/.ssh/id_rsa");

キーにパスフレーズがある場合は、addIdentity引数リストに追加できます。

        jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase);

Javadocsを参照

5
Oscar Bravo

Sshexecタスクの使用中に同じ問題が発生しました。パスフレーズ属性も追加しましたが、うまくいきました。秘密鍵のパスフレーズを作成し、これをタスクの属性として追加します。また、Windowsでputtygenを使用してキーを生成した場合は、秘密キーをオープンssh形式に変換することを忘れないでください。

3
cnu

今日も同様の問題がありました。だから私も自分の解決策を共有しようと思いました。同じ例外が発生しましたが、問題は実際にパスワードにウムラウトが含まれていることでした。それなしで新しいパスワードを選択した後、すべてがうまくいきました。

1
kukudas

現在、Jschの新しいフォークがリリースされています。例外処理ははるかに包括的です。飲み込んだり、デフォルトを設定したりする必要はもうありません。 https://github.com/vngx/vngx-jsch にアクセスして確認してください。期待どおりに機能しない場合は、問題として報告するか、Googleが積極的にメンテナンスしているため、プルリクエストを送信してください。また、Mavenの中央リポジトリにすぐに表示されるようにする予定です。

0
Scott