Add one-command server installation
This commit is contained in:
parent
e8db9f46aa
commit
20b782b3a0
3 changed files with 33 additions and 8 deletions
20
README.md
20
README.md
|
|
@ -52,13 +52,12 @@ tests/
|
||||||
## Быстрый тест на трёх серверах
|
## Быстрый тест на трёх серверах
|
||||||
|
|
||||||
1. Запустите Windows-клиент и нажмите `SSH-ключ` → `Копировать`.
|
1. Запустите Windows-клиент и нажмите `SSH-ключ` → `Копировать`.
|
||||||
2. На каждом Ubuntu/Debian-сервере скачайте и запустите установщик:
|
2. На каждом Ubuntu/Debian-сервере запустите одну команду:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fLO https://raw.githubusercontent.com/ochenstarik-ui/lightweight-server/main/ochenstarik-server-monitor-manager.sh
|
curl -fsSL \
|
||||||
chmod 700 ochenstarik-server-monitor-manager.sh
|
https://raw.githubusercontent.com/ochenstarik-ui/lightweight-server/agent/server-monitor-installer/ochenstarik-server-monitor-manager.sh \
|
||||||
bash -n ochenstarik-server-monitor-manager.sh
|
| sudo bash -s -- install
|
||||||
sudo ./ochenstarik-server-monitor-manager.sh install
|
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Вставьте скопированный публичный ключ по запросу скрипта.
|
3. Вставьте скопированный публичный ключ по запросу скрипта.
|
||||||
|
|
@ -67,6 +66,17 @@ sudo ./ochenstarik-server-monitor-manager.sh install
|
||||||
|
|
||||||
Приватный ключ хранится в локальном каталоге packaged-приложения Windows. Первый SSH-host key принимается в режиме `accept-new`, затем проверяется по отдельному `known_hosts` приложения.
|
Приватный ключ хранится в локальном каталоге 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;
|
- никаких общих root-паролей и приватных SSH-ключей в control node;
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,17 @@ detect_system() {
|
||||||
}
|
}
|
||||||
|
|
||||||
read_public_key() {
|
read_public_key() {
|
||||||
printf '\nВ Windows-приложении нажмите «SSH-ключ» → «Копировать».\n'
|
if [[ -n "${SERVER_MONITOR_PUBLIC_KEY:-}" ]]; then
|
||||||
read -rp 'Вставьте публичный ключ: ' PUBLIC_KEY
|
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="${PUBLIC_KEY//$'\r'/}"
|
||||||
[[ "$PUBLIC_KEY" =~ ^ssh-ed25519[[:space:]]+[A-Za-z0-9+/]+={0,3}([[:space:]].*)?$ ]] \
|
[[ "$PUBLIC_KEY" =~ ^ssh-ed25519[[:space:]]+[A-Za-z0-9+/]+={0,3}([[:space:]].*)?$ ]] \
|
||||||
|| die "Ожидается публичный ключ формата ssh-ed25519 AAAA..."
|
|| die "Ожидается публичный ключ формата ssh-ed25519 AAAA..."
|
||||||
|
|
@ -138,7 +147,11 @@ install_server_part() {
|
||||||
|
|
||||||
uninstall_server_part() {
|
uninstall_server_part() {
|
||||||
local answer
|
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; }
|
[[ "$answer" =~ ^[Yy]$ ]] || { log "Отменено"; return 0; }
|
||||||
rm -f -- "$MONITOR_COMMAND"
|
rm -f -- "$MONITOR_COMMAND"
|
||||||
if getent passwd "$MONITOR_USER" >/dev/null; then
|
if getent passwd "$MONITOR_USER" >/dev/null; then
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
- поддерживает Ubuntu/Debian с systemd;
|
- поддерживает Ubuntu/Debian с systemd;
|
||||||
- запрашивает публичный ключ `ssh-ed25519`, созданный Windows-клиентом;
|
- запрашивает публичный ключ `ssh-ed25519`, созданный Windows-клиентом;
|
||||||
|
- читает интерактивный ключ из `/dev/tty`, поэтому поддерживает установку через `curl | sudo bash`;
|
||||||
|
- поддерживает повторяемый режим через `SERVER_MONITOR_PUBLIC_KEY`;
|
||||||
- проверяет синтаксис ключа через `ssh-keygen`;
|
- проверяет синтаксис ключа через `ssh-keygen`;
|
||||||
- устанавливает и включает OpenSSH Server, не меняя текущий SSH-порт;
|
- устанавливает и включает OpenSSH Server, не меняя текущий SSH-порт;
|
||||||
- создаёт отдельного системного пользователя `ochenstarik-monitor` без пароля;
|
- создаёт отдельного системного пользователя `ochenstarik-monitor` без пароля;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue