AntタスクでSFTPを使ってファイルをアップする Eclipse利用

外部サーバにSFTPでファイルをアップする必要があったので、調べました。
Eclipse3.5のGalireoを利用しています。

1.jschの入手
SSH接続でのファイル転送を実行するには、scpタスクを利用します。
そのためには、jsch.jarを以下からダウンロードして
${ECLIPSE_HOME}\plugins\org.apache.ant_1.7.1.v20090120-1145\lib
などの、antプラグインのlibフォルダにいててください。

http://sourceforge.jp/projects/sfnet_jsch/

※これで出来ると思ったけど、パスが通らないので、Antで利用出来るようにEclipseで以下の設定を行いました。Window→preference→Ant/Runtime のclasspathタブのGlobal Entriesを選択し、Add External Jarsで先程のjsch.jarを指定します。

追記:Eclipseの中に元々入っているものでもOKみたいです。${ECLIPSE_HOME}/plugins/com.jcraft.jsch_0.1.42.jarあたり。


2。Antタスクの作成
SCPタスクの主な属性は以下。

属性 詳細
file コピー対象ファイル。
例 user[:password]@host:/directory/path
コピー対象ファイルはこのfile属性か要素で指定します。
todir コピー先ディレクトリ。
例 user[:password]@host:/directory/path
必須項目です。
port リモートホストに接続するためのポート。
デフォルト22。
password file属性かtodir属性にパスワードを指定している場合は不要です。

記述すると

<target name="deploy-war" >
    <scp todir="${USERID}:${PASSWORD}@${HOST_TEST}:${TOMCAT_HOME}/webapps/" trust="true">
        <fileset refid="war_transfer" />
    </scp>
</target>

みたいな感じです。

追記:keyfileを使って認証する場合は、以下の作業が必要。

Eclipse
Window→Prefference
左側ののGeneral→Network Connections→SSH2
右側のKye ManagementタブでGenerate DSA Keyなどでキーセットを作成

公開キーは、サーバ上の.sshに追加
秘密キーは、build.xmlで以下のように設定

<target name="deploy-war" >
    <scp todir="${USERID}:${PASSWORD}@${HOST_TEST}:${TOMCAT_HOME}/webapps/" trust="true" keyfile="${KEYFILE}" passphrase="${PASSPHRASE}">
        <fileset refid="war_transfer" />
    </scp>
</target>