Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Remote SSH DeployNew to Visual Studio Code? Get it now.
Remote SSH Deploy

Remote SSH Deploy

Mimoran

|
3 installs
| (0) | Free
Manage multiple SSH servers, map local sources to remote paths, auto upload on save, browse and edit files on the server, and open SSH terminals inside VS Code.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Remote SSH Deploy

A VS Code extension for working with multiple servers over SSH/SFTP: manage accounts, browse and edit files on the server, auto upload on save, upload from the right-click menu, and open SSH terminals without leaving the editor.

Features

Feature Description
Multiple accounts Each server is its own configuration: name, group, host, port, user
Several auth methods Password, private key (with passphrase), SSH agent. Keyboard-interactive and OTP are supported
Root path The server's root directory, as in PHPStorm. Clicking a server lists everything in it
Remote file browser The Remote Files panel: view, open, edit and save files directly on the server
Path mappings Optional — only needed to auto upload from the workspace to the server
Auto upload Pushes files on save, create and rename. Deleting on the server is opt-in
Right-click menu Upload, download, delete, diff and copy remote path from the Explorer and the editor
SSH terminal Runs on the connection the extension already holds, so it never asks for the password again
Security Passwords live in VS Code's SecretStorage. Host keys are verified trust-on-first-use
Per-project servers Each workspace keeps its own server list; nothing leaks between projects

Building

npm install
npm run compile

Open this folder in VS Code and press F5 to launch an Extension Development Host with the extension loaded.

Package it as a .vsix to share with the team:

npx @vscode/vsce package
code --install-extension remote-ssh-deploy-0.1.0.vsix

If code is not on your PATH, run Shell Command: Install 'code' command in PATH from the Command Palette, or call the binary directly at /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code.

Getting started

  1. Open the Remote SSH icon in the activity bar.
  2. Click + to add a server. Fill in the host, user and authentication method.
  3. Set the Root path — the server's root directory, for example /var/www/html. Autodetect fills in the user's home directory.
  4. Click Test connection. It reports whether the root path exists and how many entries it holds.
  5. Click Save.

That is enough to start working: the Remote Files panel lists everything under the root path, clicking a file opens it for editing, and Cmd+S writes it straight back to the server. SSH terminals work at this point too.

Already have a ~/.ssh/config? Use Import from ~/.ssh/config in the view's ... menu to pull in your hosts.

Path mappings (optional)

Add a mapping only if you want files pushed automatically from the workspace to the server. Each mapping pairs a local directory with a directory on the server:

  • Use ${workspaceFolder} for the local path so the configuration works on every machine on the team.
  • A remote path that does not start with / is resolved against the root path, the same way PHPStorm does it.

Without a mapping, auto upload is simply off; everything else works as normal.

Day-to-day use

Auto upload — save a file and it goes to every server that has auto upload enabled and a matching mapping. Results appear in the status bar and the Output panel.

Right-click in the Explorer — select one or more files or folders:

  • Upload to default server (Cmd+Alt+U)
  • Upload to server... — pick a different one, handy for pushing to staging and then production
  • Download from default server
  • Compare with version on server — opens VS Code's diff view
  • Delete on default server
  • Copy remote path

The status bar at the bottom right always names the current default server; click it to switch. VS Code does not allow menu item titles to change at runtime, so the menu says "default server" rather than naming it. If you want the name confirmed at the moment you upload, turn on remoteSsh.confirmUploadTarget.

Browse the server — the Remote Files panel. Click a server to list its root path, click a file to open it, then Cmd+S to save it back. Right-click for download, rename, delete, new folder, or Add to workspace to treat a remote directory like any other project folder.

Open an SSH terminal — Cmd+Alt+S, or the terminal icon next to a server. It runs on the extension's own SSH connection, so it reuses the stored password or key, never prompts again, and starts in the root path.

If you need ~/.ssh/config, ProxyJump or agent forwarding, set remoteSsh.terminalMode to systemSsh to use the system ssh command instead — at the cost of ssh doing its own password prompt.

Settings

Open Settings and search for remoteSsh:

Key Default Meaning
remoteSsh.serverStorage workspace Where the server list lives: workspace (each project its own) or global (shared)
remoteSsh.autoUpload true Master switch for auto upload
remoteSsh.uploadOnSave true Upload on save
remoteSsh.uploadOnCreate true Upload newly created files
remoteSsh.deleteRemoteOnDelete false Delete on the server when deleted locally
remoteSsh.exclude .git, node_modules, ... Globs that are never uploaded
remoteSsh.concurrency 4 Files uploaded in parallel
remoteSsh.confirmBeforeFolderUpload true Ask before pushing a whole folder
remoteSsh.confirmUploadTarget true Name the target server before a manual upload (the right-click menu cannot show it)
remoteSsh.terminalMode builtin builtin reuses the extension's connection; systemSsh calls ssh
remoteSsh.terminalCommand "" Custom SSH command template (systemSsh only)

Each server additionally has its own auto upload switch, its own exclude list, and optional chown / chmod to apply after upload.

Security notes

  • Passwords and passphrases are kept in VS Code's SecretStorage (the macOS Keychain), never in settings.json and never in a file that could be committed by accident.
  • The first connection to a host shows its fingerprint for confirmation before storing it. If the fingerprint changes later, the extension warns you — that can mean a man-in-the-middle attack, or simply that the server was rebuilt.
  • Skip host key verification should only be used on a trusted network.
  • The server list is stored per workspace, so two projects never see each other's servers. Set remoteSsh.serverStorage to global to go back to one shared list; a window with no folder open always uses the global list.
  • Servers saved by earlier versions live in global storage. The first time a project opens, the extension offers to copy them in; Remote SSH: Import servers from global storage does the same on demand. Each copy gets its own id and its own stored password, so deleting it in one project leaves the others alone.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft