Very powerful, with smart features. Very simple, requires just three lines of config! Very fast, finished in a blink.
- Features
- Browser remote with Remote Explorer
 - Diff local and remote
 - Sync directory
 - Upload/Download
 - Upload on save
 - File Watcher
 - Multiple configs
 - Switchable profiles
 
 - Commands
 - Debug
 - Support SFTP Project
 
Ctrl+Shift+Pon Windows/Linux orCmd+Shift+Pon Mac open command palette, runSFTP: configcommand.- Enjoy.
 
For detailed usage. Please go to wiki.
You can see the full config here.
{
  "host": "host",
  "username": "username",
  "remotePath": "/remote/workspace"
}{
  "username": "username",
  "password": "password",
  "remotePath": "/remote/workspace/a",
  "watcher": {
    "files": "dist/*.{js,css}",
    "autoUpload": false,
    "autoDelete": false
  },
  "profiles": {
    "dev": {
      "host": "dev-host",
      "remotePath": "/dev",
      "uploadOnSave": true
    },
    "prod": {
      "host": "prod-host",
      "remotePath": "/prod"
    }
  },
  "defaultProfile": "dev"
}Note: context and watcher are only available at root level.
Use SFTP: Set Profile to switch profile.
The context must not be same.
[
  {
    "name": "server1",
    "context": "/project/build",
    "host": "host",
    "username": "username",
    "password": "password",
    "remotePath": "/remote/project/build"
  },
  {
    "name": "server2",
    "context": "/project/src",
    "host": "host",
    "username": "username",
    "password": "password",
    "remotePath": "/remote/project/src"
  }
]Note: name is required in this mode.
You can connect to a target server through a proxy with ssh protocol.
Note: Variable substitution is not working in a hop config.
local -> hop -> target
{
  "name": "target",
  "remotePath": "/path/in/target",
  
  // hop
  "host": "hopHost",
  "username": "hopUsername",
  "privateKeyPath": "/Users/localUser/.ssh/id_rsa", // The key file is assumed on the local.
  "hop": {
    // target
    "host": "targetHost",
    "username": "targetUsername",
    "privateKeyPath": "/Users/hopUser/.ssh/id_rsa", // The key file is assumed on the hop.
  }
}local -> hopa -> hopb -> target
{
  "name": "target",
  "remotePath": "/path/in/target",
  // hopa
  "host": "hopAHost",
  "username": "hopAUsername",
  "privateKeyPath": "/Users/hopAUsername/.ssh/id_rsa" // The key file is assumed on the local.
  "hop": [
    // hopb
    {
      "host": "hopBHost",
      "username": "hopBUsername",
      "privateKeyPath": "/Users/hopaUser/.ssh/id_rsa" // The key file is assumed on the hopa.
    },
    // target
    {
      "host": "targetHost",
      "username": "targetUsername",
      "privateKeyPath": "/Users/hopbUser/.ssh/id_rsa", // The key file is assumed on the hopb.
    }
  ]
}You can use remote to tell sftp to get the config from remote-fs.
In User Setting:
"remotefs.remote": {
  "dev": {
    "scheme": "sftp",
    "host": "host",
    "username": "username",
    "rootPath": "/path/to/somewhere"
  },
  "projectX": {
    "scheme": "sftp",
    "host": "host",
    "username": "username",
    "privateKeyPath": "/Users/xx/.ssh/id_rsa",
    "rootPath": "/home/foo/some/projectx"
  }
}In sftp.json:
{
  "remote": "dev",
  "remotePath": "/home/xx/",
  "uploadOnSave": true,
  "ignore": [".vscode", ".git", ".DS_Store"]
}Remote Explorer lets you explore files in remote. You can open Remote Explorer by:
- Run Command 
View: Show SFTP. - Click SFTP view in Activity Bar.
 
You can only view a files content with Remote Explorer. Run command SFTP: Edit in Local to edit it in local.
Note: You need to manually refresh the parent folder after you delete a file to make the explorer updated.
- 
Open User Settings.
- On Windows/Linux - 
File > Preferences > Settings - On macOS - 
Code > Preferences > Settings 
 - On Windows/Linux - 
 - 
Set
sftp.debugtotrueand reload vscode. - 
View the logs in
View > Output > sftp. 
If this project helped you reduce development time, you can give me a cup of coffee :)



