This project is an SSH client tool developed with Python3 + Vue3 + ArcoDesign + Xterm.js, featuring an intuitive and user-friendly interface.
- Frontend created with Vue and ArcoDesign UI framework
- Web terminal functionality implemented using Xterm.js
- Backend server built with Python3 + FastAPI + Uvicorn
- Supports text copy and paste operations
- Folder-style management of multiple secure SSH connections
- Intuitive user interface, easy to use
- Support for multiple SSH connection management
- SFTP file transfer support
- Real-time terminal interaction
- Built-in AI assistant functionality
- SSH password and key authentication
- Other configuration saving and loading
Use the left menu to add and manage SSH connections Click on a connection to open a new terminal tab Interact with remote servers in real-time through the terminal interface
SSH connection configurations are stored in the config.json
file. This file contains all saved SSH connection information. For security reasons, this file is not committed to version control.
If the file doesn't exist, the application will create it automatically.
Frontend files are stored in the project root directory
Backend program is stored in the backend
folder under the project root
- Frontend: Vue 3 + ArcoDesign + Xterm.js
- Backend: Python 3.12
-
Install frontend dependencies:
npm install
-
Install backend dependencies:
pip install -r backend/requirements.txt
-
Start the backend server:
python backend/main.py
-
Start the frontend development server:
npm run serve
-
Test electron (automatically starts backend):
npm run electron:serve
-
Build frontend
# Default build for win x64 npm run electron:build # Build for Windows platform npm run electron:build:win # Build for Linux platform npm run electron:build:linux
-
Build backend
python -m PyInstaller --clean --noconfirm --onefile --hidden-import=gevent.monkey --hidden-import=gevent.builtins --hidden-import=gevent.signal --hidden-import=gevent.libev.corecext --hidden-import=gevent.libuv.loop --hidden-import=gevent.socket --hidden-import=gevent.threading --hidden-import=gevent._threading --hidden-import=gevent.time --hidden-import=gevent.os --hidden-import=gevent.select --hidden-import=gevent.ssl --hidden-import=gevent.subprocess --hidden-import=gevent.thread --hidden-import=gevent.resolver.thread --hidden-import=gevent.resolver.blocking --hidden-import=gevent.resolver.cares --hidden-import=gevent.resolver.dnspython --hidden-import=gevent._ssl3 --hidden-import=engineio.async_drivers.gevent --hidden-import=openai --hidden-import=ollama --hidden-import=zhipuai --hidden-import=numpy --hidden-import=pandas --hidden-import=aiohttp --hidden-import=urllib3 --hidden-import=ssl --collect-all gevent --collect-all aiohttp --collect-all urllib3 service.py ## If UPX compression is needed python -m PyInstaller --clean --noconfirm --onefile --hidden-import=gevent.monkey --hidden-import=gevent.builtins --hidden-import=gevent.signal --hidden-import=gevent.libev.corecext --hidden-import=gevent.libuv.loop --hidden-import=gevent.socket --hidden-import=gevent.threading --hidden-import=gevent._threading --hidden-import=gevent.time --hidden-import=gevent.os --hidden-import=gevent.select --hidden-import=gevent.ssl --hidden-import=gevent.subprocess --hidden-import=gevent.thread --hidden-import=gevent.resolver.thread --hidden-import=gevent.resolver.blocking --hidden-import=gevent.resolver.cares --hidden-import=gevent.resolver.dnspython --hidden-import=gevent._ssl3 --hidden-import=engineio.async_drivers.gevent --hidden-import=openai --hidden-import=ollama --hidden-import=zhipuai --hidden-import=numpy --hidden-import=pandas --hidden-import=aiohttp --hidden-import=urllib3 --hidden-import=ssl --collect-all gevent --collect-all aiohttp --collect-all urllib3 service.py --upx-dir "UPX_PATH"
python -m PyInstaller --clean --noconfirm --onedir --hidden-import=gevent.monkey --hidden-import=gevent.builtins --hidden-import=gevent.signal --hidden-import=gevent.libev.corecext --hidden-import=gevent.libuv.loop --hidden-import=gevent.socket --hidden-import=gevent.threading --hidden-import=gevent._threading --hidden-import=gevent.time --hidden-import=gevent.os --hidden-import=gevent.select --hidden-import=gevent.ssl --hidden-import=gevent.subprocess --hidden-import=gevent.thread --hidden-import=gevent.resolver.thread --hidden-import=gevent.resolver.blocking --hidden-import=gevent.resolver.cares --hidden-import=gevent.resolver.dnspython --hidden-import=gevent._ssl3 --hidden-import=engineio.async_drivers.gevent --hidden-import=openai --hidden-import=ollama --hidden-import=zhipuai --hidden-import=numpy --hidden-import=pandas --hidden-import=aiohttp --hidden-import=urllib3 --hidden-import=ssl --collect-all gevent --collect-all aiohttp --collect-all urllib3 service.py --upx-dir "UPX_PATH"
Issues and pull requests are welcome to improve this project.