--- title: "FTP" description: "Rclone docs for FTP backend" --- {{< icon "fa fa-file" >}} FTP ------------------------------ FTP is the File Transfer Protocol. FTP support is provided using the [github.com/jlaffaye/ftp](https://godoc.org/github.com/jlaffaye/ftp) package. 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. Here is an example of making an FTP configuration. First run rclone config This will guide you through an interactive setup process. An FTP remote only needs a host together with and a username and a password. With anonymous FTP server, you will need to use `anonymous` as username and your email address as the password. ``` No remotes found - make a new one 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. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value [snip] XX / FTP Connection \ "ftp" [snip] Storage> ftp ** See help for ftp backend at: https://rclone.org/ftp/ ** FTP host to connect to Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Connect to ftp.example.com \ "ftp.example.com" host> ftp.example.com FTP username, leave blank for current username, ncw Enter a string value. Press Enter for the default (""). user> FTP port, leave blank to use default (21) Enter a string value. Press Enter for the default (""). port> FTP password y) Yes type in my own password g) Generate random password y/g> y Enter the password: password: Confirm the password: password: Use FTP over TLS (Implicit) Enter a boolean value (true or false). Press Enter for the default ("false"). tls> Use FTP over TLS (Explicit) Enter a boolean value (true or false). Press Enter for the default ("false"). explicit_tls> Remote config -------------------- [remote] type = ftp host = ftp.example.com pass = *** ENCRYPTED *** -------------------- y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y ``` This remote is called `remote` and can now be used like this See all directories in the home directory 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. rclone sync -i /home/local/directory remote:directory ### Modified time ### FTP does not support modified times. Any times you see on the server will be time of upload. ### Checksums ### FTP does not support any checksums. ### Usage without a config file ### An example how to use the ftp remote without a config file: rclone lsf :ftp: --ftp-host=speedtest.tele2.net --ftp-user=anonymous --ftp-pass=`rclone obscure dummy` #### Restricted filename characters In addition to the [default restricted characters set](/overview/#restricted-characters) the following characters are also replaced: File names can also not end with the following characters. These only get replaced if they are the last character in the name: | Character | Value | Replacement | | --------- |:-----:|:-----------:| | SP | 0x20 | ␠ | Note that not all FTP servers can have all characters in file names, for example: | FTP Server| Forbidden characters | | --------- |:--------------------:| | proftpd | `*` | | pureftpd | `\ [ ]` | ### Implicit TLS ### FTP supports implicit FTP over TLS servers (FTPS). This has to be enabled in the config for the remote. The default FTPS port is `990` so the port will likely have to be explicitly set in the config for the remote. {{< rem autogenerated options start" - DO NOT EDIT - instead edit fs.RegInfo in backend/ftp/ftp.go then run make backenddocs" >}} ### Standard Options Here are the standard options specific to ftp (FTP Connection). #### --ftp-host FTP host to connect to - Config: host - Env Var: RCLONE_FTP_HOST - Type: string - Default: "" - Examples: - "ftp.example.com" - Connect to ftp.example.com #### --ftp-user FTP username, leave blank for current username, $USER - Config: user - Env Var: RCLONE_FTP_USER - Type: string - Default: "" #### --ftp-port FTP port, leave blank to use default (21) - Config: port - Env Var: RCLONE_FTP_PORT - Type: string - Default: "" #### --ftp-pass FTP password - Config: pass - Env Var: RCLONE_FTP_PASS - Type: string - Default: "" #### --ftp-tls Use FTP over TLS (Implicit) When using implicit FTP over TLS the client will connect using TLS right from the start, which in turn breaks the compatibility with non-TLS-aware servers. This is usually served over port 990 rather than port 21. Cannot be used in combination with explicit FTP. - Config: tls - Env Var: RCLONE_FTP_TLS - Type: bool - Default: false #### --ftp-explicit-tls Use FTP over TLS (Explicit) When using explicit FTP over TLS the client explicitly request security from the server in order to upgrade a plain text connection to an encrypted one. Cannot be used in combination with implicit FTP. - Config: explicit_tls - Env Var: RCLONE_FTP_TLS - Type: bool - Default: false ### Advanced Options Here are the advanced options specific to ftp (FTP Connection). #### --ftp-concurrency Maximum number of FTP simultaneous connections, 0 for unlimited - Config: concurrency - Env Var: RCLONE_FTP_CONCURRENCY - Type: int - Default: 0 #### --ftp-no-check-certificate Do not verify the TLS certificate of the server - Config: no_check_certificate - Env Var: RCLONE_FTP_NO_CHECK_CERTIFICATE - Type: bool - Default: false #### --ftp-disable-epsv Disable using EPSV even if server advertises support - Config: disable_epsv - Env Var: RCLONE_FTP_DISABLE_EPSV - Type: bool - Default: false #### --ftp-encoding This sets the encoding for the backend. See: the [encoding section in the overview](/overview/#encoding) for more info. - Config: encoding - Env Var: RCLONE_FTP_ENCODING - Type: MultiEncoder - Default: Slash,Del,Ctl,RightSpace,Dot {{< rem autogenerated options stop >}} ### Limitations ### Note that FTP does have its own implementation of : `--dump headers`, `--dump bodies`, `--dump auth` for debugging which isn't the same as the HTTP based backends - it has less fine grained control. Note that `--timeout` isn't supported (but `--contimeout` is). Note that `--bind` isn't supported. FTP could support server side move but doesn't yet. Note that the ftp backend does not support the `ftp_proxy` environment variable yet.