Easy SSH


A terminal for SSH connections inside VS Code and Cursor.
Easy SSH talks SSH directly from your computer. It does not install anything on the server, and it does not download a remote editor when you connect. The same terminal works on an internal network and on the public internet.

Quick demo: connect, Ctrl+click a directory to cd into it, then Ctrl+click a file to download it. On macOS, use Cmd+click.
What you can do
- Save, edit, and delete SSH connections
- Sign in with a password, a private key, or an SSH agent
- Hop through one or more jump hosts
- Import hosts from
~/.ssh/config
- Open a remote Linux shell in your home directory
- Run commands, full-screen programs, and
sudo the same way you would over ssh
- Download a file to your Desktop: Ctrl+click its name on Windows and Linux, Cmd+click on macOS
cd into a directory the same way: Ctrl+click on Windows and Linux, Cmd+click on macOS
- Select and copy terminal text with the mouse, as in any VS Code terminal
- Drag a file or folder onto the terminal to upload it into the current directory
- Open another session from the activity-bar icon or Easy SSH: New Terminal
Open it
Click the Easy SSH icon in the activity bar. Each click opens another terminal tab with its own connection list. Close that tab, or type /quit in it, to dismiss it.

The connection list. Up and Down select a connection, Enter connects.
Commands
On the connection panel, type / to open the command list. Connections and system commands are listed in separate groups. Up and Down move through the list, further typing filters it, and Enter runs the highlighted row. With the list closed, Up and Down move the connection selection.
| Command |
Action |
| /name |
Connect to the saved connection with that name |
| /new |
New connection |
| /edit |
Choose a connection, then edit it |
| /delete |
Choose a connection, then delete it |
| /import |
Import ~/.ssh/config |
| /folder |
Choose the local download folder |
| /quit |
Close the terminal |
| Enter |
Connect to the selected connection |

Type / to open the command list.
New, edit, and delete
/new |
/edit |
/delete |
 |
 |
 |
| Fill in the fields for a new connection |
Change a connection, here adding a jump host |
Confirm before a connection is removed |
Remote shell
A connection opens your login shell in the home directory, the same kind of shell ssh starts. The terminal is passed through: what you type goes to the server, and what the server prints is shown as-is. Aliases such as ll, functions, and the current directory stay in effect. vim, less, top, and sudo work as they do in a normal terminal. The password you type for sudo is not echoed. clear and reset clear the screen. Resizing the panel updates both the width and the height, so stty size follows the window.

A remote login shell, the same as over ssh.
To download a file to the Desktop, Ctrl+click its name on Windows and Linux, or Cmd+click it on macOS. To cd into a directory, Ctrl+click its name on Windows and Linux, or Cmd+click it on macOS. Hovering a name underlines it and shows what a click does. Drag a file or folder onto the terminal to upload it into the current directory. Progress for those transfers is shown in the status bar. exit closes the shell and returns to the connection list.

Ctrl+click a directory name (Cmd+click on macOS) to cd into it.
Each click of the activity-bar icon opens another terminal, and so does Easy SSH: New Terminal. Each one connects on its own. The first terminal is named Easy SSH, and the next are Easy SSH 2, Easy SSH 3, and so on.
Drag with the mouse to select text, then copy it as usual. If you set editor.multiCursorModifier to ctrlCmd, links open with Alt+click instead, the same as for other VS Code terminal links. To open names with a plain click instead, turn on Easy SSH: Plain Click (easySsh.plainClick). In that mode, hold Shift while dragging to select text. On macOS, turn on terminal.integrated.macOptionClickForcesSelection and hold Option instead.
| Action |
Result |
| Type, arrows, Tab, Ctrl+R, Ctrl+L |
The remote shell handles the keys. Tab finishes a path such as cd /tm |
| Ctrl+click a file name (Cmd+click on macOS) |
Download it to the Desktop |
| Ctrl+click a directory name (Cmd+click on macOS) |
cd into it |
| Drag with the mouse |
Select text |
| Drag a file or folder here |
Upload it into the current directory |
| Ctrl+C |
Stop the running command |
| Ctrl+Z |
Suspend the running command (fg continues it) |
| Paste |
Keep line breaks, including a heredoc |
exit |
Disconnect |
Passwords and key passphrases are hidden while you type. Press Enter on a saved secret to keep it. Authentication and the jump host are choices: move with Up and Down, then press Enter. A custom jump host is the only extra text. Type user@host:port. Separate extra hops with commas.
Downloads and uploads
Downloaded files go to your Desktop. On Windows this is the Desktop folder Windows actually uses, including a Desktop redirected to OneDrive or to another drive. The folder in use is written to Output → Easy SSH when the extension starts. Type /folder on the connection panel, or run Easy SSH: Set Download Folder, to choose another folder. If the file name already exists, Easy SSH adds a number, such as notes (1).txt.

Ctrl+click a file name (Cmd+click on macOS) to download it. The status bar shows where it was saved.
To upload, drag a file or a folder from your desktop onto the Easy SSH terminal. It is written into the current Linux directory of the terminal you drop it on. Each terminal has its own connection and directory, so in a split view a drop goes to the pane under the mouse. A folder is uploaded with its contents. Symbolic links inside a folder are skipped. A single drop is limited to 5000 files.
| Drag onto the terminal |
Upload finished |
 |
 |
Internal and external networks
A connection is a normal SSH session from the editor to the host you enter. Use a hostname, an IP address, or a jump host when the server is only reachable through a bastion. Jump hosts entered in the terminal use the same password, key, or agent as the connection.

A session on staging-db, reached through bastion.example.com.
Hosts imported from ~/.ssh/config keep their user, port, identity file, and ProxyJump chain. Host * wildcard blocks are skipped. Include files under ~/.ssh are read.

/import reads the hosts from ~/.ssh/config, including the ProxyJump chain. Host * is skipped.
The first time you connect, the server's host key is saved. If that key changes later, the terminal asks before trusting the new one. Easy SSH: Reset Trusted Host Keys forgets the saved keys.
Passwords and passphrases are stored in the editor's secret storage. Private keys stay in the files you point at.
Troubleshooting
I can't select text with the mouse. Easy SSH does not turn on mouse reporting in the default mode, so a normal drag selects text. A remote program can still ask for mouse input: vim with set mouse=a, tmux with set -g mouse on, htop, mc, and similar full-screen programs. While such a program is running, or when easySsh.plainClick is on, hold Shift and drag to select on Windows and Linux. On macOS, turn on terminal.integrated.macOptionClickForcesSelection, then hold Option and drag. Easy SSH turns mouse reporting off again when a full-screen program exits and when the shell prompt comes back.
An upload after sudo su, su, or ssh asks where to put the file. The prompt of the switched shell does not tell Easy SSH its directory, so Easy SSH cannot know where you are. Instead of guessing, it asks: upload to the last known directory, to your home directory, or to a directory you type. Uploads always go over SFTP as the user you signed in as, not as root. To put a file into a directory only root can write, upload it to your home directory, then move it in the terminal, for example sudo mv ~/file.txt /etc/app/. Easy SSH shows that command after the upload.
Upload fails with "Permission denied". The server refused the write for the signed-in user. The message names the path. Check the directory in the terminal with ls -ld <directory> and touch <directory>/test. If an existing file with the same name belongs to another user, remove or rename it first. Some servers also make SFTP read-only.
Where did my download go? The status bar and Output → Easy SSH show the full path. Type /folder, or run Easy SSH: Set Download Folder, to pick another folder.
Develop
npm install
npm test
npm run compile
Press F5 in VS Code or Cursor. Both hosts use the same extension API, so there is no separate Cursor build.
Compared with SSH FS
SSH FS mounts a remote system as a workspace folder and also provides tasks and remote shells. Easy SSH is the connection list and a login shell: type commands the way you would over ssh, Ctrl+click (Cmd+click on macOS) a file name to download it, and drop a file or folder to upload it.
Support
If Easy SSH saves you time, you can support its development: