2016-12-28 04:52:30 +08:00
---
title: "FTP"
description: "Rclone docs for FTP backend"
2022-11-18 01:56:24 +08:00
versionIntroduced: "v1.37"
2016-12-28 04:52:30 +08:00
---
2021-07-21 02:45:41 +08:00
# {{< icon "fa fa-file" >}} FTP
2016-12-28 04:52:30 +08:00
2020-10-30 22:59:36 +08:00
FTP is the File Transfer Protocol. Rclone FTP support is provided using the
2016-12-28 04:52:30 +08:00
[github.com/jlaffaye/ftp ](https://godoc.org/github.com/jlaffaye/ftp )
package.
2021-10-05 19:17:41 +08:00
[Limitations of Rclone's FTP backend ](#limitations )
2020-10-30 22:59:36 +08:00
2020-07-15 22:27:47 +08:00
Paths are specified as `remote:path` . If the path does not begin with
a `/` it is relative to the home directory of the user. An empty path
`remote:` refers to the user's home directory.
2021-10-14 21:40:18 +08:00
## Configuration
2020-10-30 22:59:36 +08:00
To create an FTP configuration named `remote` , run
2016-12-28 04:52:30 +08:00
2017-05-04 04:45:01 +08:00
rclone config
2020-10-30 22:59:36 +08:00
Rclone config guides you through an interactive setup process. A minimal
rclone FTP remote definition only requires host, username and password.
2022-08-28 00:30:55 +08:00
For an anonymous FTP server, see [below ](#anonymous-ftp ).
2016-12-28 04:52:30 +08:00
```
2021-11-02 04:34:46 +08:00
No remotes found, make a new one?
2017-05-04 04:45:01 +08:00
n) New remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
n/r/c/s/q> n
name> remote
Type of storage to configure.
2019-05-20 08:26:40 +08:00
Enter a string value. Press Enter for the default ("").
2017-05-04 04:45:01 +08:00
Choose a number from below, or type in your own value
2019-05-20 08:26:40 +08:00
[snip]
2022-06-20 01:29:02 +08:00
XX / FTP
2017-05-04 04:45:01 +08:00
\ "ftp"
2019-05-20 08:26:40 +08:00
[snip]
2017-05-04 04:45:01 +08:00
Storage> ftp
2019-05-20 08:26:40 +08:00
** See help for ftp backend at: https://rclone.org/ftp/ **
2017-05-25 06:24:46 +08:00
FTP host to connect to
2019-05-20 08:26:40 +08:00
Enter a string value. Press Enter for the default ("").
2017-05-25 06:24:46 +08:00
Choose a number from below, or type in your own value
1 / Connect to ftp.example.com
\ "ftp.example.com"
host> ftp.example.com
2021-09-12 00:29:57 +08:00
FTP username
Enter a string value. Press Enter for the default ("$USER").
2019-05-20 08:26:40 +08:00
user>
2021-09-12 00:29:57 +08:00
FTP port number
Enter a signed integer. Press Enter for the default (21).
2019-05-20 08:26:40 +08:00
port>
2017-05-25 06:24:46 +08:00
FTP password
2017-05-04 04:45:01 +08:00
y) Yes type in my own password
g) Generate random password
y/g> y
Enter the password:
password:
Confirm the password:
password:
2019-05-20 08:26:40 +08:00
Use FTP over TLS (Implicit)
Enter a boolean value (true or false). Press Enter for the default ("false").
tls>
2020-05-30 22:02:35 +08:00
Use FTP over TLS (Explicit)
Enter a boolean value (true or false). Press Enter for the default ("false").
explicit_tls>
2017-05-04 04:45:01 +08:00
Remote config
--------------------
2016-12-28 04:52:30 +08:00
[remote]
2019-05-20 08:26:40 +08:00
type = ftp
2017-05-25 06:24:46 +08:00
host = ftp.example.com
pass = ** * ENCRYPTED ** *
2017-05-04 04:45:01 +08:00
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
2016-12-28 04:52:30 +08:00
```
2020-10-30 22:59:36 +08:00
To see all directories in the home directory of `remote`
2017-05-04 04:45:01 +08:00
rclone lsd remote:
Make a new directory
rclone mkdir remote:path/to/directory
List the contents of a directory
rclone ls remote:path/to/directory
Sync `/home/local/directory` to the remote directory, deleting any
excess files in the directory.
2023-01-21 04:47:36 +08:00
rclone sync --interactive /home/local/directory remote:directory
2017-05-04 04:45:01 +08:00
2022-08-28 00:30:55 +08:00
### Anonymous FTP
When connecting to a FTP server that allows anonymous login, you can use the
special "anonymous" username. Traditionally, this user account accepts any
string as a password, although it is common to use either the password
"anonymous" or "guest". Some servers require the use of a valid e-mail
address as password.
Using [on-the-fly ](#backend-path-to-dir ) or
[connection string ](/docs/#connection-strings ) remotes makes it easy to access
such servers, without requiring any configuration in advance. The following
are examples of that:
rclone lsf :ftp: --ftp-host=speedtest.tele2.net --ftp-user=anonymous --ftp-pass=$(rclone obscure dummy)
rclone lsf :ftp,host=speedtest.tele2.net,user=anonymous,pass=$(rclone obscure dummy):
The above examples work in Linux shells and in PowerShell, but not Windows
Command Prompt. They execute the [rclone obscure ](/commands/rclone_obscure/ )
command to create a password string in the format required by the
[pass ](#ftp-pass ) option. The following examples are exactly the same, except use
an already obscured string representation of the same password "dummy", and
therefore works even in Windows Command Prompt:
2020-05-17 03:28:15 +08:00
2022-08-28 00:30:55 +08:00
rclone lsf :ftp: --ftp-host=speedtest.tele2.net --ftp-user=anonymous --ftp-pass=IXs2wc8OJOz7SYLBk47Ji1rHTmxM
rclone lsf :ftp,host=speedtest.tele2.net,user=anonymous,pass=IXs2wc8OJOz7SYLBk47Ji1rHTmxM:
2020-05-17 03:28:15 +08:00
2022-08-28 00:30:55 +08:00
### Implicit TLS
2019-05-20 08:26:40 +08:00
2020-10-30 22:59:36 +08:00
Rlone FTP supports implicit FTP over TLS servers (FTPS). This has to
be enabled in the FTP backend config for the remote, or with
2021-02-11 02:18:01 +08:00
[`--ftp-tls` ](#ftp-tls ). The default FTPS port is `990` , not `21` and
can be set with [`--ftp-port` ](#ftp-port ).
2019-05-20 08:26:40 +08:00
2021-10-14 21:40:18 +08:00
### Restricted filename characters
In addition to the [default restricted characters set ](/overview/#restricted-characters )
the following characters are also replaced:
2022-08-14 10:56:32 +08:00
File names cannot end with the following characters. Replacement is
2021-10-14 21:40:18 +08:00
limited to the last character in a file name:
| Character | Value | Replacement |
| --------- |:-----:|:-----------:|
| SP | 0x20 | ␠ |
Not all FTP servers can have all characters in file names, for example:
| FTP Server| Forbidden characters |
| --------- |:--------------------:|
| proftpd | `*` |
| pureftpd | `\ [ ]` |
This backend's interactive configuration wizard provides a selection of
sensible encoding settings for major FTP servers: ProFTPd, PureFTPd, VsFTPd.
Just hit a selection number when prompted.
2020-05-22 19:22:52 +08:00
{{< rem autogenerated options start " - DO NOT EDIT - instead edit fs . RegInfo in backend / ftp / ftp . go then run make backenddocs " > }}
2021-11-01 23:42:05 +08:00
### Standard options
2018-10-02 03:48:54 +08:00
2022-07-10 01:08:20 +08:00
Here are the Standard options specific to ftp (FTP).
2018-10-02 03:48:54 +08:00
#### --ftp-host
2021-11-01 23:42:05 +08:00
FTP host to connect to.
E.g. "ftp.example.com".
2018-10-02 03:48:54 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2018-10-02 03:48:54 +08:00
- Config: host
- Env Var: RCLONE_FTP_HOST
- Type: string
2022-03-18 20:29:54 +08:00
- Required: true
2018-10-02 03:48:54 +08:00
#### --ftp-user
2022-03-18 20:29:54 +08:00
FTP username.
Properties:
2018-10-02 03:48:54 +08:00
- Config: user
- Env Var: RCLONE_FTP_USER
- Type: string
2022-03-18 20:29:54 +08:00
- Default: "$USER"
2018-10-02 03:48:54 +08:00
#### --ftp-port
2022-03-18 20:29:54 +08:00
FTP port number.
Properties:
2018-10-02 03:48:54 +08:00
- Config: port
- Env Var: RCLONE_FTP_PORT
2022-03-18 20:29:54 +08:00
- Type: int
- Default: 21
2018-10-02 03:48:54 +08:00
#### --ftp-pass
2021-11-01 23:42:05 +08:00
FTP password.
2018-10-02 03:48:54 +08:00
2020-09-02 23:59:04 +08:00
**NB** Input to this must be obscured - see [rclone obscure ](/commands/rclone_obscure/ ).
2022-03-18 20:29:54 +08:00
Properties:
2018-10-02 03:48:54 +08:00
- Config: pass
- Env Var: RCLONE_FTP_PASS
- Type: string
2022-03-18 20:29:54 +08:00
- Required: false
2021-03-27 05:13:03 +08:00
2019-06-15 19:01:29 +08:00
#### --ftp-tls
2021-11-01 23:42:05 +08:00
Use Implicit FTPS (FTP over TLS).
2021-02-02 21:42:35 +08:00
When using implicit FTP over TLS the client connects using TLS
right from the start which breaks compatibility with
2020-05-30 22:02:35 +08:00
non-TLS-aware servers. This is usually served over port 990 rather
2022-12-21 01:16:14 +08:00
than port 21. Cannot be used in combination with explicit FTPS.
2020-05-30 22:02:35 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2019-06-15 19:01:29 +08:00
- Config: tls
- Env Var: RCLONE_FTP_TLS
- Type: bool
- Default: false
2020-05-30 22:02:35 +08:00
#### --ftp-explicit-tls
2021-11-01 23:42:05 +08:00
Use Explicit FTPS (FTP over TLS).
2021-02-02 21:42:35 +08:00
When using explicit FTP over TLS the client explicitly requests
2020-05-30 22:02:35 +08:00
security from the server in order to upgrade a plain text connection
2022-12-21 01:16:14 +08:00
to an encrypted one. Cannot be used in combination with implicit FTPS.
2020-05-30 22:02:35 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2020-05-30 22:02:35 +08:00
- Config: explicit_tls
2020-09-02 23:59:04 +08:00
- Env Var: RCLONE_FTP_EXPLICIT_TLS
2020-05-30 22:02:35 +08:00
- Type: bool
- Default: false
2021-11-01 23:42:05 +08:00
### Advanced options
2019-04-13 18:01:58 +08:00
2022-07-10 01:08:20 +08:00
Here are the Advanced options specific to ftp (FTP).
2019-04-13 18:01:58 +08:00
#### --ftp-concurrency
2021-11-01 23:42:05 +08:00
Maximum number of FTP simultaneous connections, 0 for unlimited.
2019-04-13 18:01:58 +08:00
2022-10-21 22:06:08 +08:00
Note that setting this is very likely to cause deadlocks so it should
be used with care.
If you are doing a sync or copy then make sure concurrency is one more
than the sum of `--transfers` and `--checkers` .
If you use `--check-first` then it just needs to be one more than the
maximum of `--checkers` and `--transfers` .
So for `concurrency 3` you'd use `--checkers 2 --transfers 2
--check-first` or `--checkers 1 --transfers 1` .
2022-03-18 20:29:54 +08:00
Properties:
2019-04-13 18:01:58 +08:00
- Config: concurrency
- Env Var: RCLONE_FTP_CONCURRENCY
- Type: int
- Default: 0
2019-06-15 19:01:29 +08:00
#### --ftp-no-check-certificate
2021-11-01 23:42:05 +08:00
Do not verify the TLS certificate of the server.
2019-06-15 19:01:29 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2019-06-15 19:01:29 +08:00
- Config: no_check_certificate
- Env Var: RCLONE_FTP_NO_CHECK_CERTIFICATE
- Type: bool
- Default: false
2019-10-26 18:04:54 +08:00
#### --ftp-disable-epsv
2021-11-01 23:42:05 +08:00
Disable using EPSV even if server advertises support.
2019-10-26 18:04:54 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2019-10-26 18:04:54 +08:00
- Config: disable_epsv
- Env Var: RCLONE_FTP_DISABLE_EPSV
- Type: bool
- Default: false
2021-02-02 21:42:35 +08:00
#### --ftp-disable-mlsd
2021-11-01 23:42:05 +08:00
Disable using MLSD even if server advertises support.
2021-02-02 21:42:35 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2021-02-02 21:42:35 +08:00
- Config: disable_mlsd
- Env Var: RCLONE_FTP_DISABLE_MLSD
- Type: bool
- Default: false
2021-04-01 02:12:08 +08:00
2022-06-02 01:15:09 +08:00
#### --ftp-disable-utf8
Disable using UTF-8 even if server advertises support.
Properties:
- Config: disable_utf8
- Env Var: RCLONE_FTP_DISABLE_UTF8
- Type: bool
- Default: false
2021-07-23 07:04:08 +08:00
#### --ftp-writing-mdtm
Use MDTM to set modification time (VsFtpd quirk)
2022-03-18 20:29:54 +08:00
Properties:
2021-07-23 07:04:08 +08:00
- Config: writing_mdtm
- Env Var: RCLONE_FTP_WRITING_MDTM
- Type: bool
- Default: false
2022-09-06 03:54:41 +08:00
#### --ftp-force-list-hidden
Use LIST -a to force listing of hidden files and folders. This will disable the use of MLSD.
Properties:
- Config: force_list_hidden
- Env Var: RCLONE_FTP_FORCE_LIST_HIDDEN
- Type: bool
- Default: false
2021-04-01 02:12:08 +08:00
#### --ftp-idle-timeout
2021-11-01 23:42:05 +08:00
Max time before closing idle connections.
2021-04-01 02:12:08 +08:00
If no connections have been returned to the connection pool in the time
given, rclone will empty the connection pool.
Set to 0 to keep connections indefinitely.
2022-03-18 20:29:54 +08:00
Properties:
2021-04-01 02:12:08 +08:00
- Config: idle_timeout
- Env Var: RCLONE_FTP_IDLE_TIMEOUT
- Type: Duration
- Default: 1m0s
#### --ftp-close-timeout
Maximum time to wait for a response to close.
2022-03-18 20:29:54 +08:00
Properties:
2021-04-01 02:12:08 +08:00
- Config: close_timeout
- Env Var: RCLONE_FTP_CLOSE_TIMEOUT
- Type: Duration
- Default: 1m0s
2019-10-26 18:04:54 +08:00
2021-11-01 23:42:05 +08:00
#### --ftp-tls-cache-size
Size of TLS session cache for all control and data connections.
TLS cache allows to resume TLS sessions and reuse PSK between connections.
Increase if default size is not enough resulting in TLS resumption errors.
Enabled by default. Use 0 to disable.
2022-03-18 20:29:54 +08:00
Properties:
2021-11-01 23:42:05 +08:00
- Config: tls_cache_size
- Env Var: RCLONE_FTP_TLS_CACHE_SIZE
- Type: int
- Default: 32
#### --ftp-disable-tls13
Disable TLS 1.3 (workaround for FTP servers with buggy TLS)
2022-03-18 20:29:54 +08:00
Properties:
2021-11-01 23:42:05 +08:00
- Config: disable_tls13
- Env Var: RCLONE_FTP_DISABLE_TLS13
- Type: bool
- Default: false
#### --ftp-shut-timeout
Maximum time to wait for data connection closing status.
2022-03-18 20:29:54 +08:00
Properties:
2021-11-01 23:42:05 +08:00
- Config: shut_timeout
- Env Var: RCLONE_FTP_SHUT_TIMEOUT
- Type: Duration
- Default: 1m0s
2022-03-18 20:29:54 +08:00
#### --ftp-ask-password
Allow asking for FTP password when needed.
If this is set and no password is supplied then rclone will ask for a password
Properties:
- Config: ask_password
- Env Var: RCLONE_FTP_ASK_PASSWORD
- Type: bool
- Default: false
2020-02-01 18:31:42 +08:00
#### --ftp-encoding
2022-03-18 20:29:54 +08:00
The encoding for the backend.
2020-02-01 18:31:42 +08:00
2021-11-01 23:42:05 +08:00
See the [encoding section in the overview ](/overview/#encoding ) for more info.
2020-02-01 18:31:42 +08:00
2022-03-18 20:29:54 +08:00
Properties:
2020-02-01 18:31:42 +08:00
- Config: encoding
- Env Var: RCLONE_FTP_ENCODING
- Type: MultiEncoder
- Default: Slash,Del,Ctl,RightSpace,Dot
2021-07-23 07:01:17 +08:00
- Examples:
- "Asterisk,Ctl,Dot,Slash"
- ProFTPd can't handle '*' in file names
- "BackSlash,Ctl,Del,Dot,RightSpace,Slash,SquareBracket"
- PureFTPd can't handle '[]' or '*' in file names
- "Ctl,LeftPeriod,Slash"
- VsFTPd can't handle file names starting with dot
2020-02-01 18:31:42 +08:00
2020-05-22 19:22:52 +08:00
{{< rem autogenerated options stop > }}
2018-10-02 01:36:15 +08:00
2021-10-14 21:40:18 +08:00
## Limitations
2021-10-05 19:17:41 +08:00
FTP servers acting as rclone remotes must support `passive` mode.
The mode cannot be configured as `passive` is the only supported one.
Rclone's FTP implementation is not compatible with `active` mode
as [the library it uses doesn't support it ](https://github.com/jlaffaye/ftp/issues/29 ).
This will likely never be supported due to security concerns.
2017-05-04 04:45:01 +08:00
2020-10-30 22:59:36 +08:00
Rclone's FTP backend does not support any checksums but can compare
file sizes.
2020-11-24 00:34:27 +08:00
`rclone about` is not supported by the FTP backend. Backends without
this capability cannot determine free space for an rclone mount or
use policy `mfs` (most free space) as a member of an rclone union
2020-11-27 22:08:52 +08:00
remote.
2022-05-14 06:06:45 +08:00
See [List of backends that do not support rclone about ](https://rclone.org/overview/#optional-features ) and [rclone about ](https://rclone.org/commands/rclone_about/ )
2020-11-24 00:34:27 +08:00
2020-10-30 22:59:36 +08:00
The implementation of : `--dump headers` ,
`--dump bodies` , `--dump auth` for debugging isn't the same as
for rclone HTTP based backends - it has less fine grained control.
`--timeout` isn't supported (but `--contimeout` is).
`--bind` isn't supported.
Rclone's FTP backend could support server-side move but does not
at present.
The `ftp_proxy` environment variable is not currently supported.
2021-07-23 07:04:08 +08:00
#### Modified time
File modification time (timestamps) is supported to 1 second resolution
for major FTP servers: ProFTPd, PureFTPd, VsFTPd, and FileZilla FTP server.
The `VsFTPd` server has non-standard implementation of time related protocol
commands and needs a special configuration setting: `writing_mdtm = true` .
Support for precise file time with other FTP servers varies depending on what
protocol extensions they advertise. If all the `MLSD` , `MDTM` and `MFTM`
extensions are present, rclone will use them together to provide precise time.
Otherwise the times you see on the FTP server through rclone are those of the
last file upload.
You can use the following command to check whether rclone can use precise time
with your FTP server: `rclone backend features your_ftp_remote:` (the trailing
colon is important). Look for the number in the line tagged by `Precision`
designating the remote time precision expressed as nanoseconds. A value of
`1000000000` means that file time precision of 1 second is available.
A value of `3153600000000000000` (or another large number) means "unsupported".