20

ポートトンネリングを介して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接続できます。
  • キーファイルに正しいパスフレーズを使用していると確信しています。

このエラーの原因は何ですか?また、どうすればよいですか?

4

5 に答える 5

38

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

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

于 2010-05-26T03:11:24.957 に答える
5

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

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

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

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

Javadocを参照してください

于 2014-01-24T10:03:13.277 に答える
3

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

于 2011-10-24T21:35:30.327 に答える
1

今日も同様の問題がありました。だから私も自分のソリューションを共有しようと思いました。同じ例外が発生しましたが、問題は、パスワード内にumlautが含まれていることでした。それなしで新しいパスワードを選択した後、すべてがうまくいきました。

于 2012-05-11T16:36:29.803 に答える
0

現在、Jschの新しいフォークが出ています。例外処理ははるかに包括的です。これ以上の嚥下やデフォルトはありません。https://github.com/vngx/vngx-jschにアクセスして確認してください。期待どおりに動作しない場合は、問題として提起するか、積極的にメンテナンスを行っているためプルリクエストを送信してください。また、Mavenの中央リポジトリですぐに起動することも検討しています。

于 2011-03-20T01:58:23.823 に答える