A modern, feature-rich Electron desktop application for managing SSH connections with built-in terminal and SFTP capabilities. Built with React, TypeScript, and real SSH/SFTP functionality powered by ssh2 and xterm.js.
- Real SSH Connections: Connect to any SSH server with password or key-based authentication
- Interactive Terminal: Full-featured terminal powered by xterm.js
- Multiple Sessions: Manage multiple SSH connections simultaneously
- Session History: Track and reconnect to previously used servers
- Remote File System: Browse directories and files on remote servers
- File Operations:
- Upload files from your local machine
- Download files with native save dialogs
- Navigate directory structures
- View file permissions and metadata
- Transfer Progress: Real-time upload/download progress tracking
- Host Profiles: Save and organize SSH connection configurations
- Quick Search: Find hosts by name, hostname, username, or tags
- Tag-based Organization: Categorize hosts with custom tags
- Visual Status Indicators: See active connections at a glance
- Local Credential Storage: All SSH credentials stored locally with encryption
- Context Isolation: Electron security best practices enforced
- No External Transmission: Sensitive data never leaves your machine
- Desktop Framework: Electron 28
- Frontend: React 18 with TypeScript
- Terminal: xterm.js with FitAddon
- SSH/SFTP: ssh2 (Node.js SSH2 client)
- UI Components: shadcn/ui with Tailwind CSS
- Build Tool: Vite + electron-builder
- IPC Communication: Secure context-isolated preload scripts
- Node.js 18 or higher
- npm or yarn package manager
- Git
# Clone the repository
git clone https://github.com/pxlcrtiv/ssh-manager.git
cd ssh-manager
# Install dependencies
npm install
# Run in development mode
npm run electron# Build the application
npm run build
# Package for your platform
npm run electron:buildThis will create distributable packages in the release/ directory:
- macOS:
.dmgand.zipfiles - Windows:
.exeinstaller and portable.exe - Linux:
.AppImageand.debpackages
- Click "Add Host" in the connections page
- Enter connection details:
- Name: Friendly name for the host
- Hostname: IP address or domain
- Port: SSH port (default: 22)
- Username: SSH username
- Authentication: Password or private key
- Add optional tags and description
- Save the profile
- Select a host from your saved connections
- Click "Open Terminal"
- Enter password/passphrase if prompted
- Use the terminal like any SSH client:
- Run commands (
ls,cd,vim, etc.) - Interactive programs (
top,htop,nano) - Long-running processes
- Run commands (
- Select a host and click "Browse Files"
- Navigate the remote file system
- Upload files: Click "Upload" and select local files
- Download files: Click download icon, choose save location
- View file details (permissions, size, modified date)
- β
Context Isolation: Electron's
contextIsolation: true - β
No Node Integration:
nodeIntegration: falsein renderer - β Secure IPC: All communication through validated channels
- β Local Encryption: Sensitive data encrypted locally
- β No External APIs: All operations happen locally
- Use SSH keys instead of passwords when possible
- Keep your SSH keys secure and password-protected
- Regularly update the application for security patches
- Review saved hosts and remove unused connections
The project includes GitHub Actions workflows for automated builds:
- On every commit: Run tests and build verification
- On tagged release (e.g.,
v1.0.0): Build installers for:- macOS (
.dmg,.zip) - Windows (
.exeinstaller, portable) - Linux (
.AppImage,.deb)
- macOS (
To create a release:
git tag v1.0.0
git push origin v1.0.0Installers will be automatically built and attached to the GitHub Release.
# Build for current platform
npm run electron:build
# Build for specific platform (requires platform tools)
npm run electron:build -- --mac
npm run electron:build -- --win
npm run electron:build -- --linuxContributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
npm run build(verify compilation) - Commit:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Test SSH/SFTP features with real servers
- Update documentation for new features
- Ensure builds pass on all platforms
See TESTING.md for comprehensive testing instructions.
- SSH connection to real server works
- Terminal commands execute correctly
- SFTP browser displays remote files
- File upload completes successfully
- File download with save dialog works
- Application builds without errors
- Download Progress: File downloads don't show real-time progress (downloads happen instantly for small files)
- Host Key Verification: First-time SSH connections may require manual host key acceptance
- TESTING.md: Comprehensive testing guide
- EVALUATION.md: Project evaluation and feature status
- GitHub Wiki: Extended documentation and guides
- Electron: Cross-platform desktop framework
- ssh2: Pure JavaScript SSH2 client
- xterm.js: Terminal emulator for the web
- shadcn/ui: Re-usable component library
- Tailwind CSS: Utility-first CSS framework
- Vite: Next generation frontend tooling
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: Support via GitHub only
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ for the SSH community