There are three ways to reach an FTP server from a Mac, and two of them have significant limitations that are not obvious until you hit them. Here is what actually works in 2026, starting with the information you need before you begin.
What you need first
Four things, all of which your host provides:
- Host — either a name (
ftp.example.com) or an IP address. Some hosts use your domain directly. - Protocol and port — FTP (21), FTPS (21 explicit, 990 implicit) or SFTP (22). If you are not sure which, the differences are here — and the short answer is to prefer SFTP.
- Username and password — note that FTP accounts are frequently not your hosting control panel login. Many hosts make you create a separate FTP user.
- Starting directory, sometimes. Shared hosts often drop you in a home directory where the actual website lives under
public_html,httpdocsorwww.
Option 1: the Finder — read-only, and only for some servers
macOS can mount an FTP server through Go ▸ Connect to Server (⌘K):
ftp://ftp.example.com
You will be asked for credentials and the server appears in the Finder like a disk. And then you discover the catch: it is read-only. Apple removed write support for FTP volumes back in OS X Lion, and it has never returned. You can browse and copy files down. You cannot upload, rename, delete, or change permissions.
There is no ftps:// support at all, and sftp:// is not a scheme the Finder understands either. So for anything beyond looking at a server, the Finder is a dead end. Why the Finder can’t do FTP any more goes into the detail and the workarounds people try.
Option 2: the Terminal — SFTP and curl
macOS includes both the OpenSSH client and curl out of the box, covering command-line transfers for SFTP as well as plain FTP and FTPS.
Connecting via SFTP in Terminal
For SFTP servers, connect directly with sftp (the full walkthrough, with commands and error fixes, is in how to connect to an SFTP server on a Mac):
sftp deploy@example.com
If you use an SSH key (see our guide to using SSH keys with an SFTP client):
sftp -i ~/.ssh/id_ed25519 deploy@example.com
Once connected, you can browse and transfer files interactively:
sftp> cd /var/www/html
sftp> put index.html
sftp> get -r uploads
sftp> exit
What about plain FTP and FTPS in Terminal?
Apple removed the old interactive ftp command in macOS High Sierra. However, macOS includes curl, which handles FTP and FTPS transfers from the command line:
# Upload a file over plain FTP:
curl -T index.html -u "username" ftp://ftp.example.com/public_html/
# Download a file:
curl -u "username" -O ftp://ftp.example.com/public_html/backup.zip
# Same upload over explicit FTPS (AUTH TLS on port 21):
curl --ssl-reqd -T index.html -u "username" ftp://ftp.example.com/public_html/
# Implicit FTPS (port 990) uses the ftps:// scheme instead:
curl -T index.html -u "username" ftps://ftp.example.com/public_html/
With -u "username" and no password, curl prompts for it, so it never lands in your shell history. The --ssl-reqd flag matters: without it, curl talks plain FTP and sends your password unencrypted.
The limits of the Terminal
Terminal tools are great for scripted deploys and single-command transfers. Their limits: there is no visual dual-pane view, no drag-and-drop with the Finder, no spacebar Quick Look preview, and no transfer queue with automatic resume when an upload drops mid-transfer.
Option 3: a native client
A dedicated Mac client covers what the Finder and Terminal cannot: FTP, FTPS and SFTP in one window, two-way drag & drop, saved server bookmarks in the Keychain, and a transfer queue that resumes automatically if Wi-Fi drops.
Setting one up in Upstream:
- Open the Site Manager (⌘N) and create a new site.
- Enter host, protocol, port, username and password. Credentials go into the encrypted macOS Keychain, not into a plain-text file.
- If connecting via SFTP with an SSH key or through a jump host, configure your key or proxy jump — see SFTP through a bastion on Mac.
- Optionally set the remote starting path (
/var/www/html) and a local starting folder, so both panes open exactly where you work. - Connect. On FTPS or SFTP you will see the server’s fingerprint on first connect — verify it and save it.
From there, the two panes show local disk and remote server side by side, drag & drop works directly with Finder windows, and pressing the spacebar triggers instant Quick Look previews. If you are comparing dedicated Mac transfer apps, check our detailed breakdowns comparing Upstream against Transmit and FileZilla.
Choosing the right protocol, quickly
If your host gives you SSH access of any kind, use SFTP: it is encrypted, it works through firewalls, and it supports key-based login. If it only offers FTP over TLS, use FTPS explicit on port 21. Use plain FTP only on a local network with a device that supports nothing else.
When the connection fails
The three failures that account for most cases:
It asks for the password again and again. The account is wrong, not the password. On shared hosting the FTP user is usually separate from the panel login. Check for a stray space pasted at the end of the username.
It logs in, then the folder never loads. This is the data connection, not your credentials — you need passive mode, or the server’s passive port range is blocked. Active vs passive FTP covers this in full.
It refuses the connection immediately. Wrong port, wrong protocol, or the service is not running. Trying FTPS against a plain-FTP port produces exactly this.
For anything else, the numeric reply code is precise — see the FTP error code reference.
Step by step
- Collect host, protocol, port, username and password from your hosting panel, and check whether the FTP account differs from your panel login.
- Pick the most secure protocol offered — SFTP if there is SSH, otherwise FTPS explicit, otherwise plain FTP on trusted networks only.
- Create a saved site rather than typing a quick connection — you will connect again, and saved credentials in the Keychain beat a text file.
- Set the remote path to your web root if you have one, so you do not navigate there every session.
- Verify the fingerprint on first connect and compare it against what your host published; accept it once and any future change will be flagged.
- Test with a small file both ways before moving anything important, to confirm read and write permissions are what you expect.
Questions people ask
Can I connect to an FTP server directly from the Finder?
You can mount one read-only through Go ▸ Connect to Server (⌘K), but you cannot upload, rename or delete files. Write support for FTP volumes was removed in OS X Lion and never restored.
Can I connect to an SFTP server using Mac Finder?
No. Finder’s Connect to Server dialog only supports ftp:// (read-only), smb://, nfs:// and afp://. It does not support sftp:// or ftps://.
Is there an FTP command in macOS Terminal?
No. Apple removed the plain ftp binary in macOS High Sierra. However, macOS includes sftp for SSH file transfers and curl for command-line FTP and FTPS transfers (curl -T file.txt -u user ftp://host/, adding --ssl-reqd for FTPS).
How do I connect to an SFTP server from Mac Terminal?
Run sftp username@hostname or sftp -i ~/.ssh/id_ed25519 username@hostname. Because macOS includes OpenSSH pre-installed, Terminal handles SFTP out of the box without installing extra software.
How do I connect to an FTP or SFTP server with an SSH key on Mac?
Plain FTP does not support SSH keys; key authentication requires SFTP (port 22). In a native client like Upstream, pick your private key (id_ed25519 or id_rsa) in the Site Manager, and macOS Keychain securely stores the passphrase.
What is the default FTP port?
Port 21 for FTP control. FTPS explicit also uses port 21, FTPS implicit uses port 990, and SFTP uses port 22 because it runs inside the SSH protocol.
Why does my Mac say the FTP server is not responding?
Usually a blocked port, a firewall, or the wrong protocol for that port. Confirm the port with your hosting provider, and try passive mode if you get as far as authenticating.
Do I need to install anything for SFTP on a Mac?
Not for the command line — macOS includes the OpenSSH client. For a dual-pane graphical interface with drag-and-drop, spacebar previews, and a resumable transfer queue, a native client is needed.