Skip to content
← nakulv.com

drawer

Your SSH machines, a live shell and their files on one terminal screen.

Pick a machine and you get a real shell in the middle and its files on the right. Press d to download, u to upload. Your machines come straight from ~/.ssh/config, with no account and no vault.

Install

curl -fsSL https://nakulv.com/drawer/install.sh | sh

  • Linux and macOS
  • x86_64 and ARM64
  • checksum-verified
  • no sudo

Install

Run this in a terminal:

$ curl -fsSL https://nakulv.com/drawer/install.sh | sh

The script:

  • picks the right build for your system;
  • downloads it from the official GitHub release (opens in a new tab);
  • checks its SHA-256 checksum and refuses to install on a mismatch;
  • puts the binary in ~/.local/bin, without sudo.

It's a short shell script, and you can read it before you run it (opens in a new tab).

Requirements

  • Linux or macOS, on x86_64 or ARM64 (Apple Silicon, Raspberry Pi 4 and newer).
  • The OpenSSH client, ssh. It's already there on almost every system.
  • A Nerd Font (opens in a new tab) in your terminal for the file icons. Without one, set DRAWER_NO_ICONS=1.

Other ways to install

Install to a different folder:

$ curl -fsSL https://nakulv.com/drawer/install.sh | DRAWER_INSTALL_DIR=/usr/local/bin sh

Build it with Cargo (Rust 1.88 or newer):

$ cargo install --locked --git https://github.com/nvrma/drawer

Quick start

  1. Run drawer. The first launch shows a short welcome tour that checks your setup.
  2. Your machines from ~/.ssh/config are listed on the left. If you have none yet, press a to add one.
  3. Select a machine and press Enter. If ssh asks you to confirm a new host's fingerprint or for a password, answer in the middle pane, just as you would with plain ssh.
  4. Press Alt+3 to jump to the machine's files. Open folders with Enter, go back with h, and press d to download to your ~/Downloads folder.

The welcome tour. Run drawer --welcome to see it again.

The screen

drawer is one screen with three panes. The pane you're in has a coloured top edge. Each machine keeps one colour everywhere it appears, so you always know which box you're looking at.

  • Machines (left): every host in your ssh config, with its address and a dot for its state: green for connected, a ring while connecting, a red cross if it couldn't connect. If a background session drops, its entry says so until you look at it.
  • Shell (middle): a full terminal on the selected machine. Colours, vim, htop and tmux all work. Switching to another machine keeps this one connected.
  • Files (right): the same machine's files, folders first. A downloaded file is marked with the day you took it, like a library date stamp.

Keys you can press right now are shown in yellow at the bottom of the screen. Press ? for the full list.

Keys

WhereKeyDoes
anywhereAlt+1 · Alt+2 · Alt+3Focus machines, shell, files
anywhereAlt+qQuit
outside the shellTab · ?Next pane · all keys
machinesEnter · j kConnect or switch · move
machinesa · e · DAdd · edit · delete a machine
machines/Search by name or address
machinesKCopy your SSH key to the machine
machinesx · rClose the session · reload config
shellShift+PgUp · Shift+PgDnScroll back
filesEnter · h · ~Open folder · go up · go home
filesd then yDownload the file or folder
filesuUpload a file or folder
files. · rShow hidden files · refresh

In the shell every key goes to the remote machine except the Alt shortcuts, so Ctrl+C and Tab behave normally. drawer leaves the mouse alone, so selecting and copying text in your terminal works as usual.

Machines

drawer has no list of its own. It reads ~/.ssh/config and every file that config pulls in with Include. A machine you add in drawer works in ssh, scp and rsync too, and the other way round.

Add a machine

Press a. Fill in a short Name and the Address. User, Port and Key file are optional. Save with Ctrl+S. The form shows which file it will write to before you save: the file that already holds most of your machines.

# what drawer writes
Host proxmox
    HostName 192.168.1.11
    User root

Edit or delete

e edits the selected machine. Only HostName, User, Port and IdentityFile change; your comments and other settings stay exactly as they were. D deletes it, after a confirmation that names the file. Only y confirms.

Your config is safe. Every field is checked, so a value can't sneak in extra ssh options. Dotfiles that are symlinks stay symlinks. Files are replaced in one atomic step with their permissions kept, the previous version is saved next to them as .drawer.bak, and nothing is written if the file changed while you were editing.

Search

Press / and type part of a name or address. Enter connects to the match, Esc clears the search.

Files

The files pane opens in the machine's home folder once you're connected. It reuses the shell's connection, so there's no second login.

Download

Select a file or a folder and press d. A slip shows what will be saved and where; press y to start. A progress card shows speed and time left. Press Esc to keep working while it runs, or c to cancel.

Upload

Open the folder you want on the machine and press u. Type the path of a file or folder on your computer; Tab completes it. Press Enter to upload.

  • Nothing is overwritten on either side. A second copy is saved as name (1).ext.
  • Remote file names are cleaned up before they touch your disk, so a file can't escape your Downloads folder.
  • Unfinished downloads stay hidden until they're complete, and a cancelled transfer removes what it started.
  • Symlinks inside folders are skipped, never followed.

Passwordless login

Typing a password on every connect is slower and less safe than using an SSH key. Connect to a machine once with its password, then press K in the machines pane. drawer adds your public key to that machine over the connection that's already open. If the key is already there, nothing changes. From then on, logging in doesn't ask for a password.

Don't have a key yet? Create one first:

$ ssh-keygen -t ed25519

Security

drawer is designed so that it never has to be trusted with your secrets.

  • Your own OpenSSH connects. drawer runs the ssh client you already have, so host keys are checked against known_hosts. New fingerprints are shown for you to confirm, and a changed host key makes ssh refuse to connect. Keys, ssh-agent, ProxyJump and Match all behave exactly as they do in plain ssh, and there's no setting that skips the checks.
  • Passwords never touch drawer. You type them into ssh's own prompt. drawer doesn't read, store or log them.
  • The shared connection is private. Its control socket lives in a folder only you can open, and the file browser runs in batch mode, so it can never prompt you.
  • The remote side can't take over your terminal. Shell output is drawn by a terminal emulator inside drawer, and file names are shown with control characters replaced.
  • The install is verified. The installer checks the release checksum and installs nothing on a mismatch.

Found a problem? Please report it privately; see the security policy (opens in a new tab).

Configuration

drawer has no settings file of its own. Your ssh config is the configuration. A few things can be changed from the command line:

OptionEffect
drawer --welcomeShow the welcome tour again
drawer --versionPrint the version
DRAWER_CONFIG=fileUse another ssh config file, like ssh -F
DRAWER_NO_ICONS=1Plain symbols instead of Nerd Font icons

drawer uses your terminal's own colour palette, so it matches whatever theme you use and changes with it. Downloads go to your system's Downloads folder.

Update and uninstall

To update, run the install command again. It always fetches the latest release.

$ curl -fsSL https://nakulv.com/drawer/install.sh | sh

To uninstall, delete the binary and the small marker file the welcome tour leaves behind:

$ rm ~/.local/bin/drawer
$ rm -r ~/.config/drawer

Your ssh config isn't touched by uninstalling.

FAQ

Does it work with jump hosts, ssh-agent and hardware keys?

Yes. drawer runs your real ssh, so everything your config and agent support works the same way.

Where do machines I add get saved?

In the config file that already holds most of your machines, and the form shows the path before you save. If you have none yet, they go to ~/.ssh/config.d/drawer.conf when your config includes that folder, otherwise to ~/.ssh/config.

Does it run on Windows?

Not natively. drawer targets Linux and macOS; it may work inside WSL.

Can I open several machines at once?

Yes. Each machine keeps its own session; select another machine and press Enter, and the others stay connected.

Where's the source?

On GitHub (opens in a new tab), under the MIT license. Bug reports and pull requests are welcome.