문서
빠른 시작 + 부분별, 기기별 기능 설명 (계속 업데이트 중)
설치와 제거
이 문서는 SSH Everywhere 패널을 설치, 업그레이드, 제거하는 방법을 자세히 설명하며, 특히 「설치 디렉터리를 바꾼 뒤 어떻게 제거하는가」와 명령의 형식 세부 사항(공백, 따옴표)을 분명히 다룹니다.
1. 설치 (한 줄 명령)
공인 IP가 있는 Linux 서버에서 실행하세요:
curl -fsSL https://ssheverywhere.com/install.sh | bash
스크립트가 자동으로 처리합니다: 시스템 감지 → 의존성 설치(Python3 / venv / pip / git / curl) → 코드 다운로드 → 가상 환경 생성 → Python 의존성 설치 → systemd 서비스 등록 및 시작.
Debian / Ubuntu / CentOS / Rocky / AlmaLinux / Fedora / WSL 지원(systemd가 없으면 자동으로 백그라운드 실행으로 전환).
설치 매개변수
| 매개변수 | 설명 | 예시 |
|---|---|---|
--lang <코드> | 안내 언어 + 패널 기본 언어(기본값은 시스템 locale에 따라 자동 판별, 1-16 번호도 허용) | --lang ja |
--dir <디렉터리> | 설치 디렉터리(기본값 /opt/ssh-everywhere. 쓸 수 없으면 자동으로 ~/ssh-everywhere로 대체하고 출력에서 설명합니다) | --dir /opt/my-panel |
--port <포트> | 패널 포트(기본값 5501) | --port 8080 |
--ascii | 순수 ASCII 기호 출력을 강제([ok] / [..] / [!] / [x]). 어떤 터미널에서도 깨지지 않습니다 | --ascii |
--unicode | Unicode 기호 출력을 강제(✓ ⟳ ⚠️ ❌). UTF-8 환경에서는 기본값입니다 | --unicode |
--yes / -y | 업그레이드 시 자동으로 확인하며 대화형 입력이 필요 없습니다 | --yes |
지원 언어 코드(16종)
| 코드 | 언어 | 코드 | 언어 | 코드 | 언어 | 코드 | 언어 |
|---|---|---|---|---|---|---|---|
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 | हिन्दी |
--lang을 전달하지 않으면 시스템 locale에 따라 자동 판별합니다(예: LANG=ja_JP.UTF-8 → 일본어 안내). 서버나 터미널의 locale이 UTF-8이 아닐 때(대형 클라우드 경량 이미지에서 흔한 LANG=C), 스크립트는 자동으로 순수 ASCII 기호 [ok]로 전환하고, 언어를 명시하지 않았다면 안내 텍스트도 영어로 되돌리며 시작 부분에서 그 이유를 설명합니다 — 이는 어떤 깨짐도 피하기 위해서입니다. 원하는 언어를 강제로 표시하려면 --lang xx --unicode를 사용하세요.
파이프 방식으로 인수를 전달할 때는 bash -s --를 붙여야 합니다:
# 일본어 안내 + 일본어 패널 curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ja # 러시아어 안내 + 사용자 지정 디렉터리와 포트 curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ru --dir /opt/my-panel --port 8080 # 구형 터미널 / GBK 터미널 깨짐 방지: 순수 ASCII 출력(중국어 안내 + [ok] 기호) curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang zh --ascii # 아랍어(RTL 인터페이스) curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --lang ar
먼저 다운로드한 뒤 실행할 수도 있습니다(대화형으로 언어, 디렉터리, 업그레이드 확인을 차례로 묻습니다):
curl -fsSL https://ssheverywhere.com/install.sh -o install.sh && bash install.sh
> 대형 클라우드(Tencent Cloud / Alibaba Cloud)는 기본적으로 root 로그인을 비활성화합니다. 명시적으로 전달한 --dir가 우선 존중되며, 현재 사용자에게 해당 디렉터리에 대한 쓰기 권한이 없을 때만 스크립트가 자동으로 HOME 디렉터리(~/ssh-everywhere)로 변경하고, 출력에서 "어느 디렉터리를 전달했는지, 왜 교체되었는지, 거기에 설치하려면 root로 실행하라"는 점을 명확히 알려줍니다.
2. 업그레이드
설치 명령을 다시 실행하면 됩니다. 스크립트에 버전 감지가 내장되어 새 버전을 발견하면 업그레이드를 안내합니다(데이터 보존, 완전 자동):
curl -fsSL https://ssheverywhere.com/install.sh | bash -s -- --yes
--yes는 업그레이드 시 자동으로 확인해 상호작용이 필요 없다는 뜻입니다.
3. 제거
기본 디렉터리 제거 (대화형, 권장)
curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh
스크립트가 먼저 제거할 내용을 나열하고 확인을 요청하며, yes를 입력해야 실행됩니다.
비대화형 / 스크립트 제거
--yes를 추가하면 확인을 건너뜁니다(안전 검사는 그대로 유지):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --yes
제거 옵션
| 옵션 | 설명 |
|---|---|
--dir <디렉터리> | 설치 디렉터리 (기본 /opt/ssh-everywhere, 디렉터리를 바꿨다면 반드시 지정) |
--keep-data | 제거 전에 data(서버 설정 / 데이터베이스)를 tar 파일로 백업 |
--yes | 비대화형 모드에서 제거를 확인 |
4. 설치 디렉터리를 바꿨다면 어떻게 제거하나요? (중요)
설치할 때 --dir로 디렉터리를 바꿨다면 제거할 때도 같은 --dir로 지정해야 합니다. 그렇지 않으면 스크립트가 설치 디렉터리를 찾지 못하고 자동으로 중단됩니다(오삭제를 막는 안전 보호).
디렉터리 경로에 공백이 없을 때
curl -fsSL https://ssheverywhere.com/uninstall.sh -o uninstall.sh && bash uninstall.sh --dir /opt/my-panel
파이프 방식(--dir를 bash -s -- 뒤에 둠):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir /opt/my-panel --yes
디렉터리 경로에 공백이 있을 때
디렉터리 이름에 공백이 있으면 큰따옴표로 경로 전체를 감싸야 합니다. 그렇지 않으면 shell이 경로를 두 토막으로 쪼개 스크립트가 디렉터리를 찾지 못합니다:
bash uninstall.sh --dir "/opt/my panel"
파이프 방식도 마찬가지입니다(따옴표로 경로 전체를 감싸고, 절반만 감싸지 마세요):
curl -fsSL https://ssheverywhere.com/uninstall.sh | bash -s -- --dir "/opt/my panel" --yes
데이터를 남기고 제거하려면
bash uninstall.sh --dir /opt/my-panel --keep-data
data(서버 설정 / 데이터베이스)는 <설치 디렉터리>-data-backup-<타임스탬프>.tar.gz로 백업되며, 제거한 뒤에도 되찾을 수 있습니다.
> 💡 권장: 설치할 때부터 디렉터리 이름에 공백을 쓰지 말고 하이픈이나 밑줄(my-panel, my_panel 등)을 쓰면 따옴표로 인한 번거로움을 덜 수 있습니다.
5. 안전 설명
제거 스크립트에는 오삭제를 막는 3중 보호가 내장되어 있습니다:
1. 절대 경로 검증 —— 상대 경로를 거부합니다.
2. 시스템 핵심 디렉터리 블랙리스트 —— /, /root, /etc, /usr, /var 등을 거부합니다.
3. 설치 디렉터리 지문 검증 —— VERSION과 app.py가 동시에 존재해야만 삭제하며, 그렇지 않으면 중단합니다.
> 제거는 패널 자체만 삭제하며, 대상 서버 / 기기의 Agent에는 영향을 주지 않습니다(패널을 삭제하면 오프라인으로 표시됩니다).