Documentación
Inicio rápido + descripción de cada función y de cada dispositivo (en constante actualización)
Instalación y desinstalación
Este documento detalla cómo instalar, actualizar y desinstalar el panel SSH Everywhere, con especial atención a «cómo desinstalar tras cambiar el directorio de instalación» y a los detalles de formato de los comandos (espacios, comillas).
1. Instalación (un solo comando)
Ejecútalo en un servidor Linux con IP pública:
curl -fsSL https://ssheverywhere.com/install.sh | bash
El script hace automáticamente: detectar el sistema → instalar dependencias (Python3 / venv / pip / git / curl) → descargar el código → crear el entorno virtual → instalar las dependencias de Python → registrar y arrancar el servicio systemd.
Compatible con Debian / Ubuntu / CentOS / Rocky / AlmaLinux / Fedora / WSL (si no hay systemd, pasa automáticamente a ejecutarse en segundo plano).
Parámetros de instalación
| Parámetro | Descripción | Ejemplo |
|---|---|---|
--lang <código> | Idioma de los mensajes + idioma predeterminado del panel (por defecto se detecta automáticamente según el locale del sistema; también acepta el número 1-16) | --lang ja |
--dir <directorio> | Directorio de instalación (por defecto /opt/ssh-everywhere; si no se puede escribir, se recurre automáticamente a ~/ssh-everywhere y se explica en la salida) | --dir /opt/my-panel |
--port <puerto> | Puerto del panel (por defecto 5501) | --port 8080 |
--ascii | Fuerza la salida con símbolos ASCII puros ([ok] / [..] / [!] / [x]); no se corrompe en ningún terminal | --ascii |
--unicode | Fuerza la salida con símbolos Unicode (✓ ⟳ ⚠️ ❌); en entornos UTF-8 es la opción predeterminada | --unicode |
--yes / -y | Confirma automáticamente al actualizar, sin interacción | --yes |
Códigos de idioma admitidos (16)
| Código | Idioma | Código | Idioma | Código | Idioma | Código | Idioma |
|---|---|---|---|---|---|---|---|
zh | 中文 | en | English | ja | 日本語 | ko | 한국어 |
es | Español | fr | Français | de | Deutsch | ru | Русский |
pt | Português | it | Italiano | ar | العربية | tr | Türkçe |
vi | Tiếng Việt | th | ไทย | id | Bahasa Indonesia | hi | हिन्दी |
Si no se pasa --lang, se detecta automáticamente según el locale del sistema (por ejemplo, LANG=ja_JP.UTF-8 → mensajes en japonés). Cuando el locale del servidor o del terminal no es UTF-8 (en las imágenes reducidas de los grandes proveedores de nube es habitual LANG=C), el script cambia automáticamente a símbolos ASCII puros [ok]; si no se especificó el idioma, también devuelve los mensajes al inglés y explica el motivo al principio — todo ello para evitar cualquier carácter ilegible. Para forzar la visualización de tu idioma puedes usar: --lang xx --unicode.
Al pasar parámetros por tubería hay que añadir bash -s --:
# Mensajes en japonés + panel en japonés curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ja # Mensajes en ruso + directorio y puerto personalizados curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ru --dir /opt/my-panel --port 8080 # Terminales antiguos / GBK con riesgo de caracteres ilegibles: salida ASCII pura (mensajes en chino + símbolos [ok]) curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang zh --ascii # Árabe (interfaz RTL) curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ar
También puedes descargarlo primero y ejecutarlo después (modo interactivo: pregunta paso a paso el idioma, el directorio y la confirmación de actualización):
curl -fsSL https://ssheverywhere.com/install.sh -o install.sh && bash install.sh
> Los grandes proveedores de nube (Tencent Cloud / Alibaba Cloud) desactivan el inicio de sesión como root de forma predeterminada. El --dir indicado explícitamente se respeta con prioridad; solo si el usuario actual no tiene permiso de escritura en ese directorio, el script cambia automáticamente a tu directorio HOME (~/ssh-everywhere) y avisa claramente en la salida de "qué directorio indicaste, por qué se cambió y que debes ejecutarlo como root si quieres instalarlo allí".
2. Actualización
Basta con volver a ejecutar el comando de instalación; el script incorpora detección de versiones y, si encuentra una nueva, avisará para actualizar (los datos se conservan y todo es automático):
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --yes
--yes indica que se confirme automáticamente al actualizar, sin interacción.
3. Desinstalación
Desinstalación desde el directorio predeterminado (interactiva, recomendada)
curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh
El script primero lista lo que se va a desinstalar y pide confirmación; solo se ejecuta si escribes yes.
Desinstalación no interactiva / por script
Añade --yes para omitir la confirmación (las comprobaciones de seguridad se mantienen):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --yes
Parámetros de desinstalación
| Parámetro | Descripción |
|---|---|
--dir <directorio> | directorio de instalación (por defecto /opt/ssh-everywhere; si lo cambiaste, es obligatorio indicarlo) |
--keep-data | antes de desinstalar, guarda data (configuración de servidores / base de datos) en una copia de seguridad tar |
--yes | confirma la desinstalación en modo no interactivo |
4. ¿Cómo desinstalar si cambié el directorio de instalación? (importante)
Si durante la instalación usaste --dir para cambiar el directorio, al desinstalar es obligatorio indicar el mismo --dir; de lo contrario, el script no encuentra el directorio de instalación y se detiene automáticamente (es una protección de seguridad para evitar borrados accidentales).
Ruta del directorio sin espacios
curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh --dir /opt/my-panel
Por tubería (--dir va después de bash -s --):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir /opt/my-panel --yes
Ruta del directorio con espacios
Si el nombre del directorio lleva espacios, es obligatorio encerrar toda la ruta entre comillas dobles; de lo contrario, la shell partirá la ruta en dos y el script no encontrará el directorio:
bash uninstall.sh --dir "/opt/my panel"
Por tubería lo mismo (las comillas deben encerrar toda la ruta, no solo una parte):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir "/opt/my panel" --yes
Quiero conservar los datos antes de desinstalar
bash uninstall.sh --dir /opt/my-panel --keep-data
data (configuración de servidores / base de datos) se guardará en <directorio-de-instalación>-data-backup-<marca-de-tiempo>.tar.gz, recuperable tras la desinstalación.
> 💡 Recomendación: evita usar espacios en el nombre del directorio desde el momento de la instalación y usa guiones o guiones bajos (como my-panel, my_panel); así te ahorras los problemas de las comillas.
5. Notas de seguridad
El script de desinstalación incorpora tres capas de protección para evitar borrados accidentales:
1. Validación de ruta absoluta —— rechaza las rutas relativas.
2. Lista negra de directorios críticos del sistema —— rechaza /, /root, /etc, /usr, /var, etc.
3. Validación de la huella del directorio de instalación —— solo se elimina si existen a la vez VERSION y app.py; de lo contrario, se detiene.
> La desinstalación solo elimina el panel en sí; el Agent del servidor / dispositivo de destino no se ve afectado (cuando se elimina el panel, pasan a mostrarse sin conexión).