captains-deck.com ~/guides/sftp G.03.A · 6 min read ↑ updated 2026-10-10 --:--:--
Intermediate G.03.A 8 min read Pro feature

Remote servers, local reflexes.

A remote pane behaves exactly like a local one. F5 still copies. F6 still moves. F3 still views. Tab still switches panes. The only difference is the wifi icon next to the path.

SFTP connection dialog showing host, user, key path, and saved connections
Cmd+K — fill in host, user, and either a password or key path. Save to Keychain.

Connecting

Press Cmd+K (or Go → Connect to SFTP Server…) to open the SFTP connection window. Fill in:

  • Host — example.com or IP
  • Port — defaults to 22
  • Username
  • Initial path — optional starting directory

Captain’s Deck reads ~/.ssh/config automatically — host aliases, ProxyJump, IdentityFile, all of it.

Hosts from your SSH config

The Saved popup in the connection window lists your Host entries under From ~/.ssh/config, after your saved connections. Pick one and the user, port and key fill in for you; the alias itself stays in the Host field, so ssh applies the rest of the entry — HostName, ProxyJump and any other options — exactly as it does in your terminal.

Jump hosts

Need to hop through a bastion? Expand SSH Tunnel / Jump Host in the connection window and enter the hop. The Jump Host field also takes a chain, separated by commas — for example user@hop1,hop2:2222 — and each hop’s key comes from your ~/.ssh/config.

With a password login, the password is only ever sent to the server you’re connecting to, never to a jump host. The hop signs you in with its key (from Jump Key or your ~/.ssh/config).

Type an address

You can also connect from Go to Path (Cmd+G): type sftp://user@host/folder (the user, port and folder are optional, as in sftp://host:2222).

  • If the pane is already on that server, it just goes to the folder.
  • If you have a saved connection to that server, it uses it — password, key and jump host included.
  • Otherwise it tries your SSH key, and if that isn’t accepted, the connection window opens with the address filled in, ready for the password.

Server tabs come back

Quit with a server open in a tab and the tab is there next time you start Captain’s Deck. It connects when you switch to it, using the password saved in your Keychain; without a saved password it shows a Connect button. (Not in the Mac App Store edition.)

Authentication

Two ways to sign in:

  1. Public key — ~/.ssh/id_ed25519 by default; pick a different key in the dialog. Works with macOS Keychain & ssh-agent.
  2. Password — stored in your Keychain on opt-in.

A couple of conveniences worth knowing:

  • Restricted / SFTP-only accounts work. Managed hosts often hand out accounts with no shell access (nologin or ForceCommand internal-sftp). Captain’s Deck detects this and routes browsing and transfers through the SFTP subsystem — no extra configuration. If a connection only ever worked from the command line before, it works here now.
  • Windows servers work. A Windows PC running its built-in OpenSSH Server is browsed through the SFTP subsystem too. / lists the drives (/C:, /D:…), and you can type a path such as /C:/Users/name as the Initial Path. Building or unpacking archives on the server itself needs a Mac or Linux server.
  • Keys from other tools just work. Private keys with Windows-style (CRLF) line endings or a missing trailing newline are accepted instead of being rejected as “invalid format”. For an encrypted (passphrase-protected) key, enter the passphrase in the Password field.
If you use 1Password’s SSH agent, Captain’s Deck picks it up automatically when SSH_AUTH_SOCK is set in your environment.

Working with remote files

Once connected, the pane header shows a coloured pill labelled SFTP followed by the host (or your saved nickname). Every keystroke works the same as on a local pane:

  • F5 copies local → remote (or remote → local — direction follows the pane layout)
  • F6 moves between any two panes — local↔remote, remote↔remote
  • F8 deletes via SFTP
  • F3, Return or a double-click on a file opens a temporary copy — F3 in the viewer, Return in the file’s own app. The copy is read-only, so changes can’t get lost in a temp folder; to change the file on the server, use F4 (see Editing remote files).

Copying between two servers

With a server in each pane, F5 copies a file straight across instead of downloading it to your Mac first:

  • Directly, when the first server can log in to the second with its own SSH key. The file goes server to server, at the speed between the two, and never touches your Mac.
  • Streamed through your Mac otherwise — downloading and uploading at the same time, with no temporary copy on your disk. This works with password logins too. (In the Mac App Store edition, a password login still downloads first, then uploads.)

Either way the file is written under a hidden temporary name and only takes its real name once it has arrived whole; Cancel removes the partial file. Folders are still copied through your Mac.

The active pane’s terminal switches to an SSH session into that host.

If the connection drops, the pane says so: it shows Disconnected with a Reconnect button, instead of an empty or stale listing.

Sync browsing

This is the WinSCP feature people miss most when they switch — and Captain’s Deck has it. Press Cmd+Option+Y (or pick View → Sync Browsing) and the panes start mirroring each other’s navigation.

What makes the implementation a bit nicer: it works on relative deltas, not absolute paths. When you toggle it on, Captain’s Deck captures both panes’ current paths as anchors. Whatever you do in one pane — cd into a subdirectory, go up, jump several levels — the same relative motion replays in the other pane.

So you can sync a local checkout at /Users/me/projects/myapp/src with the remote deploy at /var/www/myapp/src. Walk into controllers/, both sides walk into controllers/. Walk back to the project root, both sides walk back. Different absolute paths, different filesystems, doesn’t matter.

If a move would take the other pane above its top folder, that one move just isn’t mirrored; sync browsing stays on and carries on from there. Toggle it off with Cmd+Option+Y again to navigate the panes independently.

Walk both trees together and compare the size and date columns side by side for a quick “does my local match what’s deployed?” check. F3 opens a remote file in the viewer when you need a closer look.

Editing remote files

Press F4 on a file in an SFTP pane and Captain’s Deck downloads a copy, opens it in your editor, and uploads it back every time you save — no manual download–edit–upload round-trip. Each upload shows up in the Activity panel and the Operation Log, and the pane refreshes when it lands.

Pick which editor opens which file types in Settings → External Tools.

Speed & cancellation

  • Cancel — pressing Cancel in the progress dialog actually terminates the underlying scp/ssh process and (for new files) cleans up any partial bytes on the destination.
  • Live progress — the progress window shows how far each transfer has got, for key and password logins alike.
  • Pause mid-file — Pause in the Activity panel (Cmd+Option+A) stops a transfer right away, in the middle of a file, rather than at the next one. Resume carries on from where it stopped.
  • Throttle — the Throttle setting in the copy progress window slows SFTP transfers too, so a big upload doesn’t swamp a slow link. To set a standing limit, use Limit uploads to and Limit downloads to in Settings → Transfers.
  • Automatic retry — turn on Automatically retry failed transfers in Settings → Transfers and a dropped connection or timeout is retried a few times before you see an error. See Interruptions & retries.
  • Resume big transfers — turn on Resume interrupted transfers in Settings → Transfers and a large download or upload that fails or is cancelled keeps what was sent (as name.cdpart). Retry, or copy the same file again, and it carries on from there instead of starting over.
  • Server-side archive extraction — extracting a remote zip/tar/etc. runs the unpacker on the server (parallelised across multiple archives) instead of streaming bytes back to your Mac and re-uploading them.
  • Compress on the server — right-click → Compress on an SFTP pane builds the archive on the server itself. Choose .tar.gz, .tar.bz2, .tar.xz or .zip (.zip needs the zip tool installed on the server). The Activity panel shows how much has been written and for how long, a big archive can take as long as it needs, and Cancel stops the job on the server and deletes the half-built archive.

Connection pooling is on the roadmap but not yet shipped — see the changelog for status.

Organising saved connections

Saved connections appear in the sidebar. Right-click one and choose Edit Details… to set any of the following. The same fields sit below Save to Keychain in the connection window, so you can also fill them in when you first save a server.

  • Group — file the connection under a group. Pick an existing group or type a new name.
  • Label — a colour dot shown next to the connection in the sidebar.
  • Note — a reminder shown when you hover over the connection.
  • Local folder — a folder on your Mac that opens in the other pane when you connect. Handy for a site and its local copy.
  • Base URL and URL root — the web address of the server’s files, and the remote folder it points at. For example, https://example.com/ and /var/www/html.

With a Base URL set, right-click a remote file and choose Copy URL to get its address on your website, or Open URL in Browser to open it.

Groups in the sidebar

Each group gets a header in the sidebar. Click the header to fold or unfold it. Right-click a header for Rename Group… or Ungroup. To file a connection quickly, right-click it and use Move to Group — pick a group, No Group, or New Group….

Security

Stored credentials live in your macOS Keychain — never in plaintext on disk. Host keys are checked the OpenSSH way: the first time you connect to a server, its key is trusted and recorded, and if that key ever changes, the connection is refused.

For a stricter policy, turn on Strict SSH host-key checking (refuse unknown hosts) in Settings → General. Then a server you haven’t connected to before is refused until you add its key to ~/.ssh/known_hosts yourself.

Tweaks

Theme
Motion