Lightweight file manager web app for Ubuntu VMs. Install once, access via SSH tunnel from your laptop.
Dark UI · Dir tree · Download / Zip folders · Upload · Rename · Delete · Preview text files
# 1. Upload the filevm/ folder to your VM
scp -r filevm/ user@your-vm:~/
# 2. SSH in
ssh user@your-vm
# 3. Install (installs as a systemd service)
cd ~/filevm
chmod +x install.sh run.sh
./install.sh
# 4. Set a password (edit the service override)
sudo systemctl edit filevm@$(whoami)
# Add:
# [Service]
# Environment="FILEVM_SECRET=yourpassword"
sudo systemctl restart filevm@$(whoami)ssh -L 7780:127.0.0.1:7780 user@your-vm-ip -N &
open http://localhost:7780Or add to ~/.ssh/config:
Host myvm
HostName your-vm-ip
User ubuntu
LocalForward 7780 127.0.0.1:7780
Then just ssh myvm and FileVM is available at http://localhost:7780.
| Feature | How |
|---|---|
| Browse dirs | Click folder name or breadcrumb |
| Download file | Click ⬇ or click file name |
| Download folder | Right-click → Download (zips on the fly) |
| Upload files | ↑ Upload button or drag & drop |
| Rename | ✏️ button or right-click |
| Delete | 🗑 button or right-click |
| Preview | Click text/code files — opens inline (first 64 KB) |
| New folder | + Folder button |
| Sort | Click column headers |
All via environment variables:
| Var | Default | Description |
|---|---|---|
FILEVM_ROOT |
~ (home dir) |
Root directory to serve |
FILEVM_HOST |
127.0.0.1 |
Bind address (keep as loopback) |
FILEVM_PORT |
7780 |
Port |
FILEVM_SECRET |
(empty) | Password — set this! |
FILEVM_SECRET=mypassword FILEVM_ROOT=/data ./run.shEach VM runs its own FileVM. Just forward different local ports:
ssh -L 7780:127.0.0.1:7780 user@vm1 -N & # http://localhost:7780
ssh -L 7781:127.0.0.1:7780 user@vm2 -N & # http://localhost:7781
ssh -L 7782:127.0.0.1:7780 user@vm3 -N & # http://localhost:7782- Binds to
127.0.0.1only — not exposed to the internet - Accessible only through your SSH tunnel (SSH encryption + auth)
FILEVM_SECRETadds a browser password on top- Path traversal protection (all paths are resolved under root)
- No shell execution, no symlink escape