Documentation

Quick start + feature guide for every section and device (continuously updated)

Install & Uninstall

This article explains in detail how to install, upgrade, and uninstall the SSH Everywhere panel, with particular attention to "how to uninstall after changing the install directory" and the format details of the commands (spaces, quotes).

1. Install (One Line)

Run this on a Linux server with a public IP:

curl -fsSL https://ssheverywhere.com/install.sh | bash

The script automatically: detects the system → installs dependencies (Python3 / venv / pip / git / curl) → downloads the code → creates a virtual environment → installs Python dependencies → registers and starts the systemd service.

Supported: Debian / Ubuntu / CentOS / Rocky / AlmaLinux / Fedora / WSL (when systemd is unavailable it automatically falls back to running in the background).

Installation Options

OptionDescriptionExample
--lang <code>Prompt language + default panel language (by default auto-detected from the system locale; numbers 1-16 are also accepted)--lang ja
--dir <directory>Installation directory (defaults to /opt/ssh-everywhere; if it is not writable, the script automatically falls back to ~/ssh-everywhere and says so in its output)--dir /opt/my-panel
--port <port>Panel port (default 5501)--port 8080
--asciiForce pure ASCII symbol output ([ok] / [..] / [!] / [x]), so nothing gets garbled on any terminal--ascii
--unicodeForce Unicode symbol output (✓ ⟳ ⚠️ ❌); this is already the default in UTF-8 environments--unicode
--yes / -yConfirm automatically during upgrades, no interaction needed--yes

Supported language codes (16)

CodeLanguageCodeLanguageCodeLanguageCodeLanguage
zh中文enEnglishja日本語ko한국어
esEspañolfrFrançaisdeDeutschruРусский
ptPortuguêsitItalianoarالعربيةtrTürkçe
viTiếng ViệtthไทยidBahasa Indonesiahiहिन्दी

If you do not pass --lang, the language is auto-detected from the system locale (for example LANG=ja_JP.UTF-8 → Japanese prompts). When the server or terminal locale is not UTF-8 (a LANG=C locale is common on slim images from major cloud providers), the script automatically switches to pure ASCII symbols [ok], and if no language was given explicitly it also falls back to English prompt text and explains why at the beginning of its output — all of this to avoid any garbled characters. To force your language, use: --lang xx --unicode.

When passing arguments through a pipe, add bash -s --:

# Japanese prompts + Japanese panel
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ja

# Russian prompts + custom directory and port
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ru --dir /opt/my-panel --port 8080

# Old / GBK terminals that garble output: pure ASCII output (Chinese prompts + [ok] symbols)
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang zh --ascii

# Arabic (RTL interface)
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ar

You can also download it first and then run it (interactive — it asks for the language, directory and upgrade confirmation step by step):

curl -fsSL https://ssheverywhere.com/install.sh -o install.sh && bash install.sh

> Major cloud providers (Tencent Cloud / Alibaba Cloud) disable root login by default. An explicitly passed --dir is always honored first; only when the current user has no write permission for that directory does the script automatically switch to your HOME directory (~/ssh-everywhere) and state clearly in its output which directory you passed, why it was replaced, and that you should run as root if you want to install there.

2. Upgrade

Just run the install command again. The script has built-in version detection and prompts you to upgrade when a new version is found (data is preserved, fully automatic):

curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --yes

--yes means upgrade confirmation is automatic, with no interaction.

3. Uninstall

Uninstall from the Default Directory (Interactive, Recommended)

curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh

The script first lists what will be uninstalled and asks for confirmation — it only proceeds if you type yes.

Non-Interactive / Scripted Uninstall

Add --yes to skip confirmation (safety checks are still kept):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --yes

Uninstall Options

OptionDescription
--dir <directory>Install directory (default /opt/ssh-everywhere, required if you changed it)
--keep-dataBack up data (server configs / database) to a tar archive before uninstalling
--yesConfirm the uninstall in non-interactive mode

4. Changed the Install Directory? How to Uninstall (Important)

If you used --dir to change the directory during installation, you must specify the same --dir when uninstalling — otherwise the script cannot find the install directory and aborts automatically (this is a safety protection against accidental deletion).

Directory Path Without Spaces

curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh --dir /opt/my-panel

Pipe form (with --dir placed after bash -s --):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir /opt/my-panel --yes

Directory Path With Spaces

If the directory name contains spaces, you must wrap the entire path in double quotes, otherwise the shell splits the path into two parts and the script cannot find the directory:

bash uninstall.sh --dir "/opt/my panel"

The pipe form works the same way (quote the entire path, don't quote only half of it):

curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir "/opt/my panel" --yes

Keeping Your Data Before Uninstalling

bash uninstall.sh --dir /opt/my-panel --keep-data

data (server configs / database) is backed up to <install-dir>-data-backup-<timestamp>.tar.gz, so you can recover it after uninstalling.

> 💡 Recommendation: avoid spaces in the directory name from the start — use hyphens or underscores instead (like my-panel or my_panel) to save yourself the quoting hassle.

5. Safety Notes

The uninstall script has three layers of built-in protection against accidental deletion:

1. Absolute path validation — relative paths are rejected.

2. Blacklist of critical system directories — /, /root, /etc, /usr, /var, etc. are rejected.

3. Install directory fingerprint check — deletion only happens if both VERSION and app.py are present; otherwise it aborts.

> Uninstalling only removes the panel itself. Agents on target servers / devices are unaffected (they will show as offline once the panel is deleted).