From 20b782b3a0f20c0ecbfac44099f7bfe366b5574d Mon Sep 17 00:00:00 2001 From: Ochenstarik Date: Wed, 15 Jul 2026 13:39:35 +0700 Subject: [PATCH] Add one-command server installation --- README.md | 20 +++++++++++++++----- deploy/ochenstarik-server-monitor-manager.sh | 19 ++++++++++++++++--- docs/installer-contract.md | 2 ++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7dfb308..10a12e9 100644 --- a/README.md +++ b/README.md @@ -52,13 +52,12 @@ tests/ ## Быстрый тест на трёх серверах 1. Запустите Windows-клиент и нажмите `SSH-ключ` → `Копировать`. -2. На каждом Ubuntu/Debian-сервере скачайте и запустите установщик: +2. На каждом Ubuntu/Debian-сервере запустите одну команду: ```bash -curl -fLO https://raw.githubusercontent.com/ochenstarik-ui/lightweight-server/main/ochenstarik-server-monitor-manager.sh -chmod 700 ochenstarik-server-monitor-manager.sh -bash -n ochenstarik-server-monitor-manager.sh -sudo ./ochenstarik-server-monitor-manager.sh install +curl -fsSL \ + https://raw.githubusercontent.com/ochenstarik-ui/lightweight-server/agent/server-monitor-installer/ochenstarik-server-monitor-manager.sh \ + | sudo bash -s -- install ``` 3. Вставьте скопированный публичный ключ по запросу скрипта. @@ -67,6 +66,17 @@ sudo ./ochenstarik-server-monitor-manager.sh install Приватный ключ хранится в локальном каталоге packaged-приложения Windows. Первый SSH-host key принимается в режиме `accept-new`, затем проверяется по отдельному `known_hosts` приложения. +Для повторяемой установки без ручного ввода публичный ключ можно передать через окружение. Это публичная часть ключа, не секрет: + +```bash +curl -fsSL \ + https://raw.githubusercontent.com/ochenstarik-ui/lightweight-server/agent/server-monitor-installer/ochenstarik-server-monitor-manager.sh \ + | sudo env SERVER_MONITOR_PUBLIC_KEY='ssh-ed25519 AAAA... server-monitor-manager' \ + bash -s -- install +``` + +Для предварительной проверки вместо запуска через pipe скачайте файл, выполните `bash -n` и просмотрите его содержимое. + ## Принципы безопасности - никаких общих root-паролей и приватных SSH-ключей в control node; diff --git a/deploy/ochenstarik-server-monitor-manager.sh b/deploy/ochenstarik-server-monitor-manager.sh index acd8289..eea5eac 100644 --- a/deploy/ochenstarik-server-monitor-manager.sh +++ b/deploy/ochenstarik-server-monitor-manager.sh @@ -27,8 +27,17 @@ detect_system() { } read_public_key() { - printf '\nВ Windows-приложении нажмите «SSH-ключ» → «Копировать».\n' - read -rp 'Вставьте публичный ключ: ' PUBLIC_KEY + if [[ -n "${SERVER_MONITOR_PUBLIC_KEY:-}" ]]; then + PUBLIC_KEY="$SERVER_MONITOR_PUBLIC_KEY" + log "Публичный ключ получен из SERVER_MONITOR_PUBLIC_KEY" + else + printf '\nВ Windows-приложении нажмите «SSH-ключ» → «Копировать».\n' + if [[ -r /dev/tty ]]; then + IFS= read -r -p 'Вставьте публичный ключ: ' PUBLIC_KEY < /dev/tty + else + die "Нет интерактивного терминала. Передайте ключ через SERVER_MONITOR_PUBLIC_KEY" + fi + fi PUBLIC_KEY="${PUBLIC_KEY//$'\r'/}" [[ "$PUBLIC_KEY" =~ ^ssh-ed25519[[:space:]]+[A-Za-z0-9+/]+={0,3}([[:space:]].*)?$ ]] \ || die "Ожидается публичный ключ формата ssh-ed25519 AAAA..." @@ -138,7 +147,11 @@ install_server_part() { uninstall_server_part() { local answer - read -rp 'Удалить пользователя мониторинга и forced-command? [y/N]: ' answer + if [[ -r /dev/tty ]]; then + IFS= read -r -p 'Удалить пользователя мониторинга и forced-command? [y/N]: ' answer < /dev/tty + else + die "Для удаления требуется интерактивный терминал" + fi [[ "$answer" =~ ^[Yy]$ ]] || { log "Отменено"; return 0; } rm -f -- "$MONITOR_COMMAND" if getent passwd "$MONITOR_USER" >/dev/null; then diff --git a/docs/installer-contract.md b/docs/installer-contract.md index acdd521..3bd963e 100644 --- a/docs/installer-contract.md +++ b/docs/installer-contract.md @@ -8,6 +8,8 @@ - поддерживает Ubuntu/Debian с systemd; - запрашивает публичный ключ `ssh-ed25519`, созданный Windows-клиентом; +- читает интерактивный ключ из `/dev/tty`, поэтому поддерживает установку через `curl | sudo bash`; +- поддерживает повторяемый режим через `SERVER_MONITOR_PUBLIC_KEY`; - проверяет синтаксис ключа через `ssh-keygen`; - устанавливает и включает OpenSSH Server, не меняя текущий SSH-порт; - создаёт отдельного системного пользователя `ochenstarik-monitor` без пароля;