# FTP

## Setup

The following credentials keys are accepted:

* `host` **(required)** -> The hostname / ip of the machine
* `user` **(required)** -> The username to access the machine
* `port` (optional. Default is `21`)
* `password` (optional) -> The password to access the machine
* `path` (optional, *v1.4.20*) -> The root path to use when connecting
* `ftps` (optional *since v1.2.12*) -> Whether to use FTPS (`true` or `false`)
* `ssh_tunnel` (optional since *v1.2.15*) -> The URL of the SSH server you would like to use as a tunnel (example `ssh://user:password@db.host:22`)
* `ssh_private_key` (optional since *v1.2.15*) -> The private key to use to access a SSH tunnel server (raw string or path to file).
* `ssh_passphrase` (optional since *v1.2.15*) -> The passphrase to use to access a SSH tunnel server.

### Using `sling conns`

Here are examples of setting a connection named `MY_FTP`. We must provide the `type=ftp` property:

{% code overflow="wrap" %}

```bash
$ sling conns set MY_FTP type=ftp host=<host> user=<user> password=<password> port=<port>

# Or use url
$ sling conns set MY_FTP url=ftp://myuser:mypass@host.ip:21
```

{% endcode %}

### Environment Variable

See [here](https://docs.slingdata.io/sling-cli/environment#dot-env-file-.env.sling) to learn more about the `.env.sling` file.

In JSON/YAML format:

{% code overflow="wrap" %}

```bash
export MY_FTP='{ type: ftp, url: "ftp://myuser:mypass@host.ip:21" }'
```

{% endcode %}

### Sling Env File YAML

See [here](https://docs.slingdata.io/sling-cli/environment#sling-env-file-env.yaml) to learn more about the sling `env.yaml` file.

```yaml
connections:
  MY_FTP:
    type: ftp
    host: <host>
    user: <user>
    port: <port>
    password: <password>

  MY_FTP_URL:
    url: "ftp://myuser:mypass@host.ip:21"
```

If you are facing issues connecting, please reach out to us at <support@slingdata.io>, on [discord](https://discord.gg/q5xtaSNDvp) or open a Github Issue [here](https://github.com/slingdata-io/sling-cli/issues).
