<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>SCP Task</title>
</head>

<body>

<h2><a name="scp">SCP</a></h2>
<h3>Description</h3>

<p><em>since Apache Ant 1.6</em></p>

<p>Copies a file or FileSet to or from a (remote) machine running an SSH daemon.
FileSet <i>only</i> works for copying files from the local machine to a
remote machine.</p>

<p><b>Note:</b> This task depends on external libraries not included
in the Ant distribution.  See <a
href="../install.html#librarydependencies">Library Dependencies</a>
for more information.  This task has been tested with jsch-0.1.2 and later.</p>

<p>See also the <a href="sshexec.html">sshexec task</a></p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">file</td>
    <td valign="top">The file to copy.  This can be a local path or a
    remote path of the form <i>user[:password]@host:/directory/path</i>.
    <i>:password</i> can be omitted if you use key based
    authentication or specify the password attribute.  The way remote
    path is recognized is whether it contains @ character or not. This
    will not work if your localPath contains @ character.</td>
    <td valign="top" align="center">Yes, unless a nested
    <code>&lt;fileset&gt;</code> element is used.</td>
  </tr>
  <tr>
    <td valign="top">localFile</td>
    <td valign="top">This is an alternative to the file attribute. But
    this must always point to a local file. The reason this was added
    was that when you give file attribute it is treated as remote if
    it contains @ character. This character can exist also in local
    paths.  <em>since Ant 1.6.2</em></td>
    <td valign="top" align="center">Alternative to file attribute.</td>
  </tr>
  <tr>
    <td valign="top">remoteFile</td>
    <td valign="top">This is an alternative to the file attribute. But
    this must always point to a remote file.  <em>since Ant 1.6.2</em></td>
    <td valign="top" align="center">Alternative to file attribute.</td>
  </tr>
  <tr>
    <td valign="top">todir</td>
    <td valign="top">The directory to copy to.  This can be a local path
    or a remote path of the form <i>user[:password]@host:/directory/path</i>.
    <i>:password</i> can be omitted if you use key based
    authentication or specify the password attribute.  The way remote
    path is recognized is whether it contains @ character or not. This
    will not work if your localPath contains @ character.</td>
    <td valian="top" align="center">Yes</td>
  </tr>
  <tr>
    <td valign="top">localTodir</td>
    <td valign="top">This is an alternative to the todir
    attribute. But this must always point to a local directory. The
    reason this was added was that when you give todir attribute it is
    treated as remote if it contains @ character. This character can
    exist also in local paths.  <em>since Ant 1.6.2</em></td>
    <td valian="top" align="center">Alternative to todir attribute.</td>
  </tr>
  <tr>
    <td valign="top">localTofile</td>
    <td valign="top">Changes the file name to the given name while
    receiving it, only useful if receiving a single file.  <em>since
    Ant 1.6.2</em></td>
    <td valian="top" align="center">Alternative to todir attribute.</td>
  </tr>
  <tr>
    <td valign="top">remoteTodir</td>
    <td valign="top">This is an alternative to the todir
    attribute. But this must always point to a remote directory.
    <em>since Ant 1.6.2</em></td>
    <td valian="top" align="center">Alternative to todir attribute.</td>
  </tr>
  <tr>
    <td valign="top">remoteTofile</td>
    <td valign="top">Changes the file name to the given name while
    sending it, only useful if sending a single file.  <em>since
    Ant 1.6.2</em></td>
    <td valian="top" align="center">Alternative to todir attribute.</td>
  </tr>
  <tr>
    <td valign="top">port</td>
    <td valign="top">The port to connect to on the remote host.</td>
    <td valian="top" align="center">No, defaults to 22.</td>
  </tr>
  <tr>
    <td valign="top">trust</td>
    <td valign="top">This trusts all unknown hosts if set to yes/true.<br>
      <strong>Note</strong> If you set this to false (the default), the
      host you connect to must be listed in your knownhosts file, this
      also implies that the file exists.</td>
    <td valian="top" align="center">No, defaults to No.</td>
  </tr>
  <tr>
    <td valign="top">knownhosts</td>
    <td valign="top">This sets the known hosts file to use to validate
    the identity of the remote host.  This must be a SSH2 format file.
    SSH1 format is not supported.</td>
    <td valian="top" align="center">No, defaults to
    ${user.home}/.ssh/known_hosts.</td>
  </tr>
  <tr>
    <td valign="top">failonerror</td>
     <td valign="top">Whether to halt the build if the transfer fails.
     </td>
     <td valign="top" align="center">No; defaults to true.</td>
  </tr>
  <tr>
    <td valign="top">password</td>
     <td valign="top">The password.</td>
     <td valign="top" align="center">Not if you are using key based
     authentication or the password has been given in the file or
     todir attribute.</td>
  </tr>
  <tr>
    <td valign="top">keyfile</td>
     <td valign="top">Location of the file holding the private key.</td>
     <td valign="top" align="center">Yes, if you are using key based
     authentication.</td>
  </tr>
  <tr>
    <td valign="top">passphrase</td>
     <td valign="top">Passphrase for your private key.</td>
     <td valign="top" align="center">No, defaults to an empty string.</td>
  </tr>
  <tr>
    <td valign="top">verbose</td>
    <td valign="top">Determines whether SCP outputs verbosely to the
    user. Currently this means outputting dots/stars showing the
    progress of a file transfer.  <em>since Ant 1.6.2</em></td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">sftp</td>
    <td valign="top">Determines whether SCP uses the sftp protocol.
    The sftp protocol is the file transfer protocol of SSH2.  It is
    recommended that this be set to true if you are copying to/from a
    server that doesn't support scp1. <em>since Ant 1.7</em></td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">preserveLastModified</td>
    <td valign="top">Determines whether the last modification
    timestamp of downloaded files is preserved.  It only works when
    transferring from a remote to a local system and probably doesn't
    work with a server that doesn't support SSH2.  <em>since Ant
    1.8.0</em></td>
    <td valign="top" align="center">No; defaults to false.</td>
  </tr>
  <tr>
    <td valign="top">filemode</td>
    <td valign="top">A 3 digit octal string, specify the user, group
      and other modes in the standard Unix fashion.  Only applies to
      uploaded files.  Note the actual permissions of the remote
      file will be governed by this setting and the UMASK on the
      remote server. Default is 644. <em>since Ant 1.9.5</em>.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">dirmode</td>
    <td valign="top">A 3 digit octal string, specify the user, group
      and other modes in the standard Unix fashion.  Only applies to
      uploaded dirs.  Note the actual permissions of the remote
      dir will be governed by this setting and the UMASK on the
      remote server. Default is 755. <em>since Ant 1.9.5</em>.</td>
    <td align="center" valign="top">No</td>
  </tr>
  <tr>
    <td valign="top">serverAliveIntervalSeconds</td>
    <td valign="top">Sets a timeout interval in seconds after which if no data has
      been received from the server, the task will send a message through
      the encrypted channel to request a response from the server.
      <em>since Ant 1.9.7</em></td>
    <td align="center" valign="top">No, the default is 0, indicating
      that these messages will not be sent to the server</td>
  </tr>
  <tr>
    <td valign="top">serverAliveCountMax</td>
    <td valign="top">The number of server alive messages which may be
      sent without receiving any messages back from the server. Only
      used if serverAliveIntervalSeconds is not 0.
      <em>since Ant 1.9.7</em></td>
    <td align="center" valign="top">No, defaults to 3</td>
  </tr>
  <tr>
    <td valign="top">compressed</td>
    <td valign="top">Whether to enable compression during transfer.
      <em>since Ant 1.9.8</em></td>
    <td align="center" valign="top">No, defaults to false</td>
  </tr>
</table>
<h3>Parameters specified as nested elements</h3>

<h4>fileset or resource collections</h4>
 <p><a href="../Types/fileset.html">FileSet</a>s or <a href="../Types/resources.html#collection">Resource Collection</a>s are used to select
 groups of files to copy. To use a fileset or a resource collection, the <code>todir</code> attribute must be set.</p>

Prior to Ant 1.9.7 only &lt;fileset&gt; has been supported as a nested element.

<h3>Examples</h3>
<p><b>Copy a single local file to a remote machine</b></p>
<pre>
  &lt;scp file=&quot;myfile.txt&quot; todir=&quot;user:password@somehost:/home/chuck&quot;/&gt;
</pre>

<p><b>Copy a single local file to a remote machine with separate
password attribute</b></p>
<pre>
  &lt;scp file=&quot;myfile.txt&quot; todir=&quot;user@somehost:/home/chuck&quot; password=&quot;password&quot;/&gt;
</pre>

<p><b>Copy a single local file to a remote machine using key base
authentication.</b></p>
<pre>
  &lt;scp file=&quot;myfile.txt&quot;
       todir=&quot;user@somehost:/home/chuck&quot; 
       keyfile=&quot;${user.home}/.ssh/id_dsa&quot;
       passphrase=&quot;my extremely secret passphrase&quot;
  /&gt;
</pre>

<p><b>Copy a single remote file to a local directory</b></p>
<pre>
  &lt;scp file=&quot;user:password@somehost:/home/chuck/myfile.txt&quot; todir=&quot;../some/other/dir&quot;/&gt;
</pre>

<p><b>Copy a remote directory to a local directory</b></p>
<pre>
  &lt;scp file=&quot;user:password@somehost:/home/chuck/*&quot; todir=&quot;/home/sara&quot;/&gt;
</pre>

<p><b>Copy a local directory to a remote directory</b></p>
<pre>
  &lt;scp todir=&quot;user:password@somehost:/home/chuck/&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;/&gt;
  &lt;/scp&gt;
</pre>
<p><b>Copy a set of files to a directory</b></p>
<pre>
  &lt;scp todir=&quot;user:password@somehost:/home/chuck&quot;&gt;
    &lt;fileset dir=&quot;src_dir&quot;&gt;
      &lt;include name=&quot;**/*.java&quot;/&gt;
    &lt;/fileset&gt;
  &lt;/scp&gt;
</pre>
<p><b>Copy a set of files to a remote directory in reverse last-modified order</b></p>
<pre>
  &lt;scp todir=&quot;user:password@somehost:/home/chuck&quot;&gt;
    &lt;sort&gt;
      &lt;reverse&gt;
        &lt;date /&gt;
      &lt;/reverse&gt;
      &lt;fileset dir=&quot;src_dir&quot;&gt;
        &lt;include name=&quot;**/*&quot; /&gt;
      &lt;/fileset&gt;
    &lt;/sort&gt;
  &lt;/scp&gt;
</pre>

<p><strong>Security Note:</strong>  Hard coding passwords and/or usernames
in scp task can be a serious security hole.  Consider using variable
substitution and include the password on the command line.  For example:
<p>
<pre>
    &lt;scp todir=&quot;${username}:${password}@host:/dir&quot; ...&gt;
</pre>
Invoking ant with the following command line:
<pre>
    ant -Dusername=me -Dpassword=mypassword target1 target2
</pre>

Is slightly better, but the username/password is exposed to all users on an Unix
system (via the ps command). The best approach is to use the
<code>&lt;input&gt;</code> task and/or retrieve the password from a (secured)
.properties file.

<p>

<p><strong>Unix Note:</strong> File permissions are not retained when files
are downloaded; they end up with the default <code>UMASK</code> permissions
instead. This is caused by the lack of any means to query or set file
permissions in the current Java runtimes. If you need a permission-
preserving copy function, use <code>&lt;exec executable="scp" ... &gt;</code>
instead.
</p>



</body>
</html>

