Building an SSH and SFTP Client in the Browser with ssheasy

The Problem

Setting up SSH and SFTP access can be a pain, especially when you're not on your own machine. Installing a terminal client, configuring keys, and managing credentials can be a hassle. And if you're on a locked-down machine (hello, corporate laptops), you're out of luck. Wouldn't it be easier if you could just fire up a browser and connect to your remote machines directly?

What This Does

ssheasy is an SSH and SFTP client that runs entirely in your browser. It's built using Go and WebAssembly (WASM), with a React frontend and a golang backend. The project marries a web/ directory full of TypeScript and Angular-filemanager hacks with a proxy/ written in Go to tunnel TCP connections through WebSockets.

The real magic happens in web/main.go, where the WASM-based SSH/SFTP client is implemented. This bad boy handles the heavy lifting of SSH connections, while the proxy/main.go Go server does the dirty work of translating WebSocket traffic into actual SSH commands. There's also an nginx/ directory that helps serve the frontend and route traffic properly.

Bonus points for including monitoring out of the box with Prometheus and Grafana dashboards (grafana/provisioning/dashboards/proxy.json). It’s like DevOps-lite for your browser-based SSH client.

Real-World Use

Let’s say you’re on a Chromebook at a coffee shop. You need to SSH into a server but don’t have a terminal client handy because, well, it’s a Chromebook. No problem—just spin up the Docker stack (docker-compose up), point your browser to http://localhost:8080, and use the /connect endpoint to log into your server. For example:

Want to test it locally? The docker-compose.yaml spins up an sshd container for testing. Use the host testssh with root/root credentials. There's even WebAuthn support for key-based authentication, which is a nice touch if you're into modern security practices.

File management? That’s covered too. The project includes a Frankenstein version of angular-filemanager (check web/html/node_modules/angular-filemanager). It’s been hacked to replace backend API calls with the WASM SFTP client, so you can manage remote files directly in the browser.

The Bottom Line

ssheasy is a niche but clever tool. If you’re in a pinch and need SSH/SFTP from a browser, it gets the job done. The tech stack is over-engineered for what it does (React + Go + WASM + Docker + Prometheus + Grafana for an SSH client? Really?), but if you’re into tinkering with modern tools, this repo is worth a look. Just don’t expect polished docs or robust testing—it’s very much a DIY playground.