diff --git a/releases/ServerManager-v1.8.69-linux-x64 b/releases/ServerManager-v1.8.69-linux-x64 deleted file mode 100644 index 5e08764..0000000 Binary files a/releases/ServerManager-v1.8.69-linux-x64 and /dev/null differ diff --git a/releases/ServerManager-v1.8.74-win-x64.exe b/releases/ServerManager-v1.8.74-win-x64.exe new file mode 100644 index 0000000..d7d478e Binary files /dev/null and b/releases/ServerManager-v1.8.74-win-x64.exe differ diff --git a/tools/skill-ssh.md b/tools/skill-ssh.md index 0f2dc4f..b8e4dab 100644 --- a/tools/skill-ssh.md +++ b/tools/skill-ssh.md @@ -204,11 +204,13 @@ unset SSH_ASKPASS && unset DISPLAY && ssh ALIAS "command" **ВСЕГДА используй `--upload` / `--download` для передачи файлов.** Это SFTP-протокол с автоматическими фичами: - **Файлы >10MB:** chunked upload с resume — при обрыве продолжит с того места -- **Retry:** до 5 попыток с exponential backoff при сетевых ошибках +- **Retry:** adaptive retry — до 30 попыток для больших файлов (exponential backoff, min 5s) - **SHA256 верификация:** автоматическая проверка целостности после загрузки - **Atomic rename:** запись в .part файл → проверка → переименование - **Keepalive:** SSH keepalive каждые 15 секунд — не обрывается NAT/роутером - **Прогресс:** 25/50/75% для файлов >1MB +- **Resume:** при повторном запуске `--upload` автоматически продолжает с .part файла (не начинает заново) +- **Windows SSH:** SHA256 через PowerShell `Get-FileHash`, пути автоматически нормализуются ```bash # Загрузить файл на сервер (SFTP) @@ -218,6 +220,8 @@ python ~/.server-connections/ssh.py ALIAS --upload "D:/local/file" //remote/path python ~/.server-connections/ssh.py ALIAS --download //remote/path/file "D:/local/file" ``` +**Поведение при обрыве:** соединение оборвалось → ждёт 5-30 сек → переподключается → проверяет .part файл на сервере → дозаливает с того места. Если файл полностью залит — проверяет SHA256 → atomic rename `.part` → финальный файл. Работает даже на нестабильных каналах (тестировано: 250MB через 6 reconnect'ов). + **ЗАПРЕЩЕНО** использовать shell-команды как **способ передачи файлов** на/с сервера: - `echo "длинный_контент" > remote_file` — обрежет данные, сломает бинарники - `base64` чанки через exec_command — ненадёжно, ломается на больших файлах (exit 127) diff --git a/version.py b/version.py index c999347..c1c451a 100755 --- a/version.py +++ b/version.py @@ -1,6 +1,6 @@ """Version info for ServerManager.""" -__version__ = "1.8.73" +__version__ = "1.8.74" __app_name__ = "ServerManager" __author__ = "aibot777" __description__ = "Desktop GUI for managing remote servers"