SCP

Apache Ant 1.6以降

説明

SSHデーモンが動作している(リモート)マシンとの間で、ファイルまたはFileSetをコピーします。FileSetは、ローカルマシンからリモートマシンへのファイルのコピーのみに有効です。

注意: このタスクは、Antディストリビューションに含まれていない外部ライブラリに依存しています。詳細については、ライブラリの依存関係を参照してください。このタスクは、jsch-0.1.2以降でテストされています。

sshexecタスクも参照してください

パラメータ

属性 説明 必須
file コピーするファイル。これは、ローカルパスまたは user[:password]@host:/directory/path の形式のリモートパスにできます。:password は、キーベース認証を使用している場合、またはpassword属性を指定している場合は省略できます。リモートパスを認識する方法は、@文字が含まれているかどうかです。localPath@文字が含まれている場合、これは機能しません。 はい、ネストされた<fileset>要素が使用されていない場合
localFile これは、file属性の代替です。ただし、これは常にローカルファイルを指している必要があります。これが追加された理由は、file属性を指定すると、@文字が含まれている場合にリモートとして扱われるためです。この文字はローカルパスにも存在できます。Ant 1.6.2以降 file属性の代替
remoteFile これは、file属性の代替です。ただし、これは常にリモートファイルを指している必要があります。Ant 1.6.2以降 file属性の代替
todir コピー先のディレクトリ。これは、ローカルパスまたは user[:password]@host:/directory/path の形式のリモートパスにできます。:password は、キーベース認証を使用している場合、またはpassword属性を指定している場合は省略できます。リモートパスを認識する方法は、@文字が含まれているかどうかです。localPath@文字が含まれている場合、これは機能しません。 はい
localTodir これは、todir属性の代替です。ただし、これは常にローカルディレクトリを指している必要があります。todir属性を指定すると、@文字が含まれている場合にリモートとして扱われるため、これが追加されました。この文字はローカルパスにも存在できます。Ant 1.6.2以降 todir属性の代替
localTofile 受信時にファイル名を指定された名前に変更します。単一のファイルを受信する場合にのみ役立ちます。Ant 1.6.2以降 todir属性の代替
remoteTodir これは、todir属性の代替です。ただし、これは常にリモートディレクトリを指している必要があります。Ant 1.6.2以降 todir属性の代替
remoteTofile 送信時にファイル名を指定された名前に変更します。単一のファイルを送信する場合にのみ役立ちます。Ant 1.6.2以降 todir属性の代替
port リモートホストに接続するポート。 いいえ; デフォルトは22
trust これをyesまたはtrueに設定すると、不明なすべてのホストを信頼します。
注意: これをfalse(デフォルト)に設定した場合、接続するホストはknownhostsファイルにリストされている必要があります。これは、ファイルが存在することも意味します。
いいえ; デフォルトはno
knownhosts リモートホストのIDを検証するために使用する既知のホストファイルを設定します。これはSSH2形式のファイルである必要があります。SSH1形式はサポートされていません。 いいえ; デフォルトは${user.home}/.ssh/known_hosts
failonerror 転送が失敗した場合にビルドを停止するかどうか。 いいえ; デフォルトはtrue
password パスワード。 はい、キーベース認証を使用している場合、またはパスワードがファイルまたはtodir属性で指定されている場合を除きます。
keyfile 秘密キーを保持するファイルの場所。 はい、キーベース認証を使用している場合
passphrase 秘密キーのパスフレーズ。 いいえ; デフォルトは空の文字列
sshConfig OpenSSHスタイルの構成(例: ${user.home}/.ssh/config)を保持するファイルの場所。ユーザー名とキーファイルは、タスクパラメータでまだ指定されていない限り、構成ファイルから読み取られます。Ant 1.10.8以降 いいえ
verbose SCPがユーザーに詳細な出力を表示するかどうかを決定します。現在、これはファイル転送の進行状況を示すドット/星の出力を意味します。Ant 1.6.2以降 いいえ; デフォルトはfalse
sftp SCPがsftpプロトコルを使用するかどうかを決定します。sftpプロトコルはSSH2のファイル転送プロトコルです。scp1をサポートしていないサーバーとの間でコピーする場合は、これをtrueに設定することをお勧めします。Ant 1.7以降 いいえ; デフォルトはfalse
preserveLastModified ダウンロードしたファイルの最終更新タイムスタンプを保持するかどうかを決定します。リモートからローカルシステムへの転送時にのみ機能し、SSH2をサポートしていないサーバーではおそらく機能しません。Ant 1.8.0以降 いいえ; デフォルトはfalse
filemode 3桁の8進数文字列で、標準のUnix形式でユーザー、グループ、およびその他のモードを指定します。アップロードされたファイルにのみ適用されます。リモートファイルの実際の権限は、この設定とリモートサーバーのUMASKによって制御されることに注意してください。Ant 1.9.5以降 いいえ; デフォルトは644
dirmode 3桁の8進数文字列で、標準のUnix形式でユーザー、グループ、およびその他のモードを指定します。アップロードされたディレクトリにのみ適用されます。リモートディレクトリの実際の権限は、この設定とリモートサーバーのUMASKによって制御されることに注意してください。Ant 1.9.5以降 いいえ; デフォルトは755
serverAliveIntervalSeconds サーバーからデータを受信しなかった場合、タスクがサーバーからの応答を要求するメッセージを暗号化チャネルを通じて送信するまでのタイムアウト間隔を秒単位で設定します。Ant 1.9.7以降 いいえ、デフォルトは0で、これらのメッセージがサーバーに送信されないことを示します
serverAliveCountMax サーバーからメッセージが返信されないまま送信できるサーバーアクティブメッセージの数。serverAliveIntervalSeconds0でない場合にのみ使用されます。Ant 1.9.7以降 いいえ; デフォルトは3
compressed 転送中に圧縮を有効にするかどうか。Ant 1.9.8以降 いいえ; デフォルトはfalse

ネストされた要素として指定されたパラメータ

リソースコレクション

FileSetまたはその他のリソースコレクションを使用して、コピーするファイルのグループを選択します。filesetまたはリソースコレクションを使用するには、todir属性を設定する必要があります。

Ant 1.9.7より前は、ネストされた要素として<fileset>のみがサポートされていました。

additionalConfig

Ant 1.10.10以降

特定のAnt属性で直接サポートされていない、作成されたJSchセッションの構成設定を追加します。

属性 説明 必須
key 構成設定のキー。 はい
value 構成設定の値。 はい

単一のローカルファイルをリモートマシンにコピーする

<scp file="myfile.txt" todir="user:password@somehost:/home/chuck"/>

別々のpassword属性を使用して、単一のローカルファイルをリモートマシンにコピーする

<scp file="myfile.txt" todir="user@somehost:/home/chuck" password="password"/>

キーベース認証を使用して、単一のローカルファイルをリモートマシンにコピーする

<scp file="myfile.txt"
     todir="user@somehost:/home/chuck"
     keyfile="${user.home}/.ssh/id_dsa"
     passphrase="my extremely secret passphrase"/>

単一のリモートファイルをローカルディレクトリにコピーする

<scp file="user:password@somehost:/home/chuck/myfile.txt" todir="../some/other/dir"/>

リモートディレクトリをローカルディレクトリにコピーする

<scp file="user:password@somehost:/home/chuck/*" todir="/home/sara"/>

ローカルディレクトリをリモートディレクトリにコピーする

<scp todir="user:password@somehost:/home/chuck/">
  <fileset dir="src_dir"/>
</scp>

ファイルのセットをディレクトリにコピーする

<scp todir="user:password@somehost:/home/chuck">
  <fileset dir="src_dir">
    <include name="**/*.java"/>
  </fileset>
</scp>

ファイルのセットをリモートディレクトリに最終更新日の逆順でコピーする

<scp todir="user:password@somehost:/home/chuck">
  <sort>
    <reverse>
      <date/>
    </reverse>
    <fileset dir="src_dir">
      <include name="**/*"/>
    </fileset>
  </sort>
</scp>

セキュリティに関する注意: scpタスクでパスワードやユーザー名をハードコーディングすることは、深刻なセキュリティホールになる可能性があります。変数置換を使用して、コマンドラインにパスワードを含めることを検討してください。例:

<scp todir="${username}:${password}@host:/dir" ...>

次のコマンドラインでAntを起動する

ant -Dusername=me -Dpassword=mypassword target1 target2

少しはマシですが、ユーザー名/パスワードはUnixシステム上のすべてのユーザーに(psコマンド経由で)公開されます。最善のアプローチは、<input>タスクを使用するか、保護された.propertiesファイルからパスワードを取得することです。

Unixに関する注意: ファイルのアクセス許可は、ファイルのダウンロード時に保持されません。代わりに、デフォルトのUMASKアクセス許可で終了します。これは、現在のJavaランタイムでファイルアクセス許可をクエリまたは設定する手段がないことが原因です。アクセス許可を保持するコピー機能が必要な場合は、代わりに<exec executable="scp" ... >を使用してください。