2

sshexecパスフレーズで構成された秘密鍵で Antのタスクを使用する方法は?

次の回避策を見つけました。

  • 秘密鍵からパスフレーズを削除する (最も実用的)
  • たとえば、パスフレーズをコマンドラインオプションとして渡します-Dpass=mypass(安全ではありません)
  • Ant ジョブ定義ファイルにパスフレーズをハードコードする (最悪)

これらはどれも私にとって良い選択肢ではありませんが、最初のものは受け入れられます。

秘密鍵をロードしpageantても、まったく役に立たないようです。他の回答からは、Ant がアクセスしようとしているように見えますが、アクセスできず、パスワード認証にフォールバックし、次のように失敗します。

com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.java:490)
    at com.jcraft.jsch.Session.connect(Session.java:162)
... (rest of the stack trace omitted)

もう 1 つの一般的な症状は、Unlimited Strength JCE がインストールされていない場合で、次のようなエラーが表示されます。

com.jcraft.jsch.JSchException: The cipher 'aes256-cbc' is required, but it is not available.
    at com.jcraft.jsch.KeyPair.loadPPK(KeyPair.java:942)
    at com.jcraft.jsch.KeyPair.load(KeyPair.java:515)
... (rest of the stack trace omitted)

私の質問に戻るには、これを正しく機能させるにはどうすればよいですか? どこにもハードコーディングしたり、コマンドラインに入力したりせずに、パスフレーズ付きの秘密鍵を使用しますか? pageantAnt タスクを実行する前に、パスフレーズを入力して秘密鍵を保存できるを利用するのが最善です。

4

1 に答える 1

2

コマンドラインから ant-file を実行すると、パスフレーズをハードコードするのではなく、パスフレーズを要求される場合があります。重要な部分は、パスフレーズの入力を求め、それをプロパティに保存し、パスフレーズ引数でこのプロパティを参照することです。

  <target name="copy">    
    <input message="Enter passphrase for keyfile:" addproperty="the.password">
        <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
    </input>
    <upload-files host="the.host" />
  </target>

  <macrodef name="upload-files">
    <attribute name="host" />
    <sequential>
      <scp file="${the.file}"
           todir="@{host}:directoryname/${filename}"
           keyfile="${key.file}" passphrase="${the.password}" verbose="true"/>      
    </sequential>
  </macrodef>

要件:

  • アリ 1.7.1
  • Java 6。Java 5 で実行されている場合、「通常」にフォールバックします。
  • コマンドラインからantファイルを実行します(ソースによると、EclipseはSecureInputHandlerを処理しません)

ソース: http://www.dcepler.net/post.cfm/hiding-password-input-in-ant

于 2015-03-26T16:39:45.947 に答える