Free and Open Source Web-Based Terminal Access
Access your VPS/server terminal from any browser, anywhere in the world
π Live Demo | π Documentation | π§ Troubleshooting | π Report Bug | β¨ Request Feature
termi-host is a free, open-source web-based terminal solution that lets you access your server terminal through any web browser. No SSH client installation needed. Perfect for:
- π± Accessing servers from mobile devices
- πΊ Using terminals on smart TVs
- π» Managing servers from public computers without SSH clients
- π Remote server administration from anywhere
- π Educational environments and coding tutorials
- π’ Team collaboration and pair programming
- π Browser-Based Terminal: No SSH client needed - works in Chrome, Firefox, Safari, Edge
- π Optional Authentication: Built-in password protection (configurable)
- β‘ Real-time Communication: WebSocket-based for instant command execution
- π¨ Modern UI: Beautiful terminal interface powered by xterm.js
- π± Fully Responsive: Works seamlessly on desktop, tablet, and mobile
- π Lightweight: Minimal resource footprint (~50MB RAM)
- π§ Easy Configuration: JSON-based config with environment variable support
- π Multi-Shell Support: Works with bash, zsh, sh, and more
- π― Zero Dependencies: Just Node.js - no database or additional services needed
- π¦ Easy Deployment: Single command installation
- π Auto-Reconnect: Automatic reconnection on network issues
- π₯οΈ PTY Support: Full pseudo-terminal with proper signal handling
- π¨ Terminal Colors: Full ANSI color support
- β¨οΈ Special Keys: All keyboard shortcuts work (Ctrl+C, Ctrl+Z, etc.)
- π Dynamic Resize: Terminal auto-resizes with browser window
- π SELinux Compatible: Works with security-enhanced Linux
- π Systemd Integration: Run as a system service with auto-restart
The easiest way to get started is using our automated installation script:
# Clone and install with one command
git clone https://github.com/vpbgkt/termi-host.git && cd termi-host && bash install.shThe script will:
- β Check your Node.js version (and install Node.js 20 if needed)
- β Install build tools required for node-pty
- β Install all npm dependencies automatically
- β Create default configuration file
- β Generate secure session secret
Then start the server:
npm startIf you prefer manual installation:
# 1. Clone the repository
git clone https://github.com/vpbgkt/termi-host.git
cd termi-host
# 2. Run the installation script
bash install.sh
# 3. Start the server
npm startThat's it! Open your browser to:
- Local:
http://localhost:3000 - Remote:
http://YOUR_SERVER_IP:3000
Default Login:
- Username:
admin - Password:
admin(β οΈ CHANGE THIS!)
The easiest and recommended method:
# Clone and run installation script
git clone https://github.com/vpbgkt/termi-host.git
cd termi-host
bash install.shThe install.sh script will:
- β Detect your operating system
- β Check Node.js version (requires >= 18.0.0)
- β Offer to install Node.js 20 LTS if needed
- β Install build tools (gcc, make, python3) if missing
- β Install all npm dependencies
- β Create default configuration with secure session secret
- β Display next steps and access information
Supported Operating Systems:
- Ubuntu/Debian
- CentOS/RHEL/AlmaLinux/Rocky Linux
- Fedora
- Other Linux distributions (with manual Node.js installation)
If you already have Node.js >= 18.0.0 and build tools installed:
# Clone repository
git clone https://github.com/vpbgkt/termi-host.git
cd termi-host
# Install dependencies
npm install
# Create configuration (optional, will use defaults)
cp config/local.json.example config/local.json
# Start server
npm start- Node.js 18.0.0 or higher (Download)
- npm (comes with Node.js)
- Operating System: Linux, macOS, or Windows with WSL
- Build tools (for node-pty compilation):
- Linux:
build-essential python3 make gcc g++ - macOS: Xcode Command Line Tools
- Windows: Visual Studio Build Tools
- Linux:
# Ubuntu/Debian
sudo apt update
sudo apt install -y build-essential python3 make g++
# CentOS/RHEL/AlmaLinux
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3 make gcc gcc-c++
# Fedora
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y python3 make gcc gcc-c++Using the installation script (recommended):
sudo bash install.sh --serviceThis will automatically:
- Create systemd service file
- Enable service to start on boot
- Start the service immediately
- Display service status and management commands
Manual service installation:
# Create systemd service
sudo tee /etc/systemd/system/termi-host.service > /dev/null <<EOF
[Unit]
Description=termi-host Web Terminal
Documentation=https://github.com/vpbgkt/termi-host
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$(pwd)
ExecStart=$(which node) $(pwd)/src/server.js
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable termi-host
sudo systemctl start termi-host
# Check status
sudo systemctl status termi-hostService Management Commands:
# Start service
sudo systemctl start termi-host
# Stop service
sudo systemctl stop termi-host
# Restart service
sudo systemctl restart termi-host
# Check status
sudo systemctl status termi-host
# View logs
sudo journalctl -u termi-host -ftermi-host can be configured via JSON files or environment variables.
Create a local configuration file:
cp config/local.json.example config/local.jsonEdit config/local.json:
{
"server": {
"port": 3000,
"host": "0.0.0.0"
},
"terminal": {
"shell": "bash",
"cols": 80,
"rows": 24
},
"authentication": {
"enabled": false,
"username": "admin",
"password": "admin"
}
}PORT=8080 AUTH_ENABLED=true AUTH_PASSWORD=secret npm startSee Configuration Guide for detailed options.
Having issues? Check our Troubleshooting Guide for:
- Node.js version problems
- Build tool errors
- Module not found errors
- Connection issues
- And more...
Common quick fixes:
# Reinstall dependencies
rm -rf node_modules package-lock.json
npm install
# Use automated installer
bash install.sh
# Check logs (if running as service)
sudo journalctl -u termi-host -fDefault credentials (CHANGE THESE!):
- Username:
admin - Password:
admin
To change credentials:
-
Create
config/local.json:{ "authentication": { "enabled": true, "username": "your-username", "password": "your-strong-password", "sessionSecret": "generate-random-string-here" } } -
Restart the server:
npm start # OR if using systemd: sudo systemctl restart termi-host
Generate a secure session secret:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"server {
listen 443 ssl;
server_name terminal.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}# Clone the repo
git clone https://github.com/vpbgkt/termi-host.git
cd termi-host
# Install dependencies
npm install
# Run in development mode
npm run dev- Configuration Guide
- Troubleshooting Guide
- Security Best Practices (Coming Soon)
- API Documentation (Coming Soon)
Contributions are welcome! This project aims to have implementations in multiple languages (Python, Go, Rust, etc.).
See CONTRIBUTING.md for guidelines (Coming Soon).
- Core terminal functionality
- WebSocket communication
- Configuration system
- Authentication implementation
- Multi-session support
- File upload/download
- Terminal recording
- Python implementation
- Go implementation
- Docker image
- npm package
- Remote Server Management: Access your VPS from anywhere
- DevOps & SysAdmin: Quick server access without SSH client
- Education: Teaching Linux/command-line to students
- IoT & Embedded: Access Raspberry Pi and embedded devices
- Emergency Access: When you don't have your SSH keys
- Mobile Administration: Manage servers from your phone
- Team Collaboration: Share terminal access with team members
- Customer Support: Help users debug issues remotely
web terminal, browser terminal, online terminal, web ssh, browser ssh, remote terminal access, web-based terminal, online ssh client, terminal emulator, xterm.js, node-pty, websocket terminal, cloud terminal, vps terminal, server terminal, linux terminal browser, terminal web interface, ssh web client, web console, remote shell access
| Feature | termi-host | ttyd | wetty | shellinabox |
|---|---|---|---|---|
| Installation | β Easy | Medium | Medium | Medium |
| Dependencies | Node.js only | C/libwebsockets | Node.js | C/OpenSSL |
| Authentication | β Optional | β Yes | β Yes | β Yes |
| Configuration | β JSON/Env | Command-line | Command-line | Command-line |
| WebSocket | β Yes | β Yes | β Yes | No |
| Mobile Support | β Excellent | Good | Good | Fair |
| Active Development | β Active | Active | Active | Inactive |
Contributions are welcome! We're planning implementations in multiple languages.
See CONTRIBUTING.md for guidelines.
Roadmap:
- Node.js implementation
- Python implementation
- Go implementation
- Rust implementation
- Docker image
- npm package
- Multi-session support
- File upload/download
MIT License - see LICENSE file for details.
Free and open source forever! β€οΈ
Created with β€οΈ by @vpbgkt
Want to contribute? Check out CONTRIBUTING.md!
- π GitHub Repository
- π Report Issues
- π¬ Discussions
- π¦ npm Package (Coming Soon)
- π₯ Video Tutorial (Coming Soon)
If you find termi-host useful, please consider:
- β Star this repository on GitHub
- π Report bugs to help improve
- π‘ Suggest features you'd like to see
- π’ Share with others who might find it useful
- π€ Contribute code or documentation
- xterm.js - Terminal emulator
- node-pty - PTY bindings for Node.js
- Express - Web framework
- ws - WebSocket library
β‘ Built with β€οΈ for developers who need terminal access anywhere