Add files via upload

Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
This commit is contained in:
wpa-2
2025-02-24 16:20:59 +00:00
committed by GitHub
parent 87730543d1
commit 27b9ec49da

View File

@ -8,17 +8,17 @@ REM backup-restore.bat backup [ -n HOST ] [ -u USER ] [ -o OUTPUT ]
REM backup-restore.bat restore [ -n HOST ] [ -u USER ] [ -b BACKUP_FILE ] REM backup-restore.bat restore [ -n HOST ] [ -u USER ] [ -b BACKUP_FILE ]
REM --------------------------------------------------------------------------- REM ---------------------------------------------------------------------------
set "SCRIPTNAME=%~0" set "LOGFILE=%~dp0BR_GPT.log"
echo [INFO] Script started at %DATE% %TIME% > "%LOGFILE%"
REM --------------------------------------------------------------------------- REM ---------------------------------------------------------------------------
REM If no arguments, show usage REM Check for Arguments
if "%~1"=="" goto usage if "%~1"=="" goto usage
REM First argument is the subcommand: "backup" or "restore"
set "SUBCOMMAND=%~1" set "SUBCOMMAND=%~1"
shift shift
REM Default values REM Default Values
set "UNIT_HOSTNAME=10.0.0.2" set "UNIT_HOSTNAME=10.0.0.2"
set "UNIT_USERNAME=pi" set "UNIT_USERNAME=pi"
set "OUTPUT=" set "OUTPUT="
@ -59,113 +59,84 @@ if "%SUBCOMMAND%"=="restore" (
) )
) )
echo "Unknown or invalid argument: %~1" echo [ERROR] Unknown or invalid argument: %~1 >> "%LOGFILE%"
goto usage goto usage
:done_args :done_args
REM --------------------------------------------------------------------------- REM ---------------------------------------------------------------------------
REM Subcommand routing REM Subcommand Routing
if "%SUBCOMMAND%"=="backup" goto do_backup if "%SUBCOMMAND%"=="backup" goto do_backup
if "%SUBCOMMAND%"=="restore" goto do_restore if "%SUBCOMMAND%"=="restore" goto do_restore
goto usage goto usage
REM =========================================================================== REM ===========================================================================
:do_backup :do_backup
REM If OUTPUT not specified, generate a name like HOST-backup-RANDOM.tgz
if "%OUTPUT%"=="" ( if "%OUTPUT%"=="" (
set /a RAND=%random% set /a RAND=%random%
set "OUTPUT=%UNIT_HOSTNAME%-backup-%RAND%.tgz" set "OUTPUT=%UNIT_HOSTNAME%-backup-%RAND%.tgz"
) )
echo @ Checking connectivity to %UNIT_HOSTNAME% ... echo [INFO] Checking connectivity to %UNIT_HOSTNAME% >> "%LOGFILE%"
ping -n 1 %UNIT_HOSTNAME% >nul 2>&1 ping -n 1 %UNIT_HOSTNAME% >nul 2>&1
if errorlevel 1 ( if errorlevel 1 (
echo @ unit %UNIT_HOSTNAME% can't be reached. echo [ERROR] Device %UNIT_HOSTNAME% is unreachable. >> "%LOGFILE%"
exit /b 1 exit /b 1
) )
echo @ Backing up %UNIT_HOSTNAME% to %OUTPUT% ... echo [INFO] Backing up %UNIT_HOSTNAME% to %OUTPUT% ... >> "%LOGFILE%"
REM List of files to back up from the remote device:
set "FILES_TO_BACKUP=/root/settings.yaml /root/client_secrets.json /root/.ssh /root/.api-report.json /root/.bashrc /root/.profile /home/pi/handshakes /root/peers /etc/pwnagotchi/ /usr/local/share/pwnagotchi/custom-plugins /etc/ssh/ /home/pi/.bashrc /home/pi/.profile /home/pi/.wpa_sec_uploads" set "FILES_TO_BACKUP=/root/settings.yaml /root/client_secrets.json /root/.ssh /root/.api-report.json /root/.bashrc /root/.profile /home/pi/handshakes /root/peers /etc/pwnagotchi/ /usr/local/share/pwnagotchi/custom-plugins /etc/ssh/ /home/pi/.bashrc /home/pi/.profile /home/pi/.wpa_sec_uploads"
REM --------------------------------------------------------------------------- ssh %UNIT_USERNAME%@%UNIT_HOSTNAME% "sudo tar -cf - %FILES_TO_BACKUP% | gzip -9" > "%OUTPUT%" 2>> "%LOGFILE%"
REM We'll have the REMOTE do the tar + gzip (since Windows cmd lacks gzip)
REM so we capture the compressed stream directly into %OUTPUT%
REM ---------------------------------------------------------------------------
ssh %UNIT_USERNAME%@%UNIT_HOSTNAME% "sudo tar -cf - %FILES_TO_BACKUP% | gzip -9" > "%OUTPUT%"
if errorlevel 1 ( if errorlevel 1 (
echo @ Backup failed echo [ERROR] Backup failed! >> "%LOGFILE%"
exit /b 1 exit /b 1
) )
echo @ Backup finished. Archive: %OUTPUT% echo [INFO] Backup completed successfully: %OUTPUT% >> "%LOGFILE%"
exit /b 0 exit /b 0
REM =========================================================================== REM ===========================================================================
:do_restore :do_restore
if "%BACKUP_FILE%"=="" ( if "%BACKUP_FILE%"=="" (
REM If user didn't specify -b, try to find the latest *.tgz with the hostname prefix
for /f "delims=" %%A in ('dir /b /a-d /O-D "%UNIT_HOSTNAME%-backup-*.tgz" 2^>nul') do ( for /f "delims=" %%A in ('dir /b /a-d /O-D "%UNIT_HOSTNAME%-backup-*.tgz" 2^>nul') do (
set "BACKUP_FILE=%%A" set "BACKUP_FILE=%%A"
goto found_file goto found_file
) )
echo @ Can't find backup file. Please specify one with '-b'. echo [ERROR] No backup file found. >> "%LOGFILE%"
exit /b 1 exit /b 1
:found_file :found_file
echo @ Found backup file: %BACKUP_FILE% echo [INFO] Found backup file: %BACKUP_FILE% >> "%LOGFILE%"
set /p CONTINUE="@ Continue restoring this file? (y/n) "
if /i "%CONTINUE%"=="y" (
echo (continuing...)
) else (
exit /b 1
)
) )
echo @ Checking connectivity to %UNIT_HOSTNAME% ... echo [INFO] Checking connectivity to %UNIT_HOSTNAME% >> "%LOGFILE%"
ping -n 1 %UNIT_HOSTNAME% > nul 2>&1 ping -n 1 %UNIT_HOSTNAME% > nul 2>&1
if errorlevel 1 ( if errorlevel 1 (
echo @ unit %UNIT_HOSTNAME% can't be reached. echo [ERROR] Device %UNIT_HOSTNAME% is unreachable. >> "%LOGFILE%"
exit /b 1 exit /b 1
) )
echo @ Restoring %BACKUP_FILE% to %UNIT_HOSTNAME% ... echo [INFO] Copying backup file to remote device... >> "%LOGFILE%"
scp "%BACKUP_FILE%" %UNIT_USERNAME%@%UNIT_HOSTNAME%:/tmp/ 2>> "%LOGFILE%"
REM We'll send the local file contents over SSH; the remote will do tar xzv
type "%BACKUP_FILE%" | ssh %UNIT_USERNAME%@%UNIT_HOSTNAME% "tar xzv -C /"
if errorlevel 1 ( if errorlevel 1 (
echo @ Restore failed. echo [ERROR] Failed to copy backup file. >> "%LOGFILE%"
exit /b 1 exit /b 1
) )
echo @ Restore finished. echo [INFO] Restoring %BACKUP_FILE% on %UNIT_HOSTNAME% >> "%LOGFILE%"
ssh %UNIT_USERNAME%@%UNIT_HOSTNAME% "sudo tar xzvf /tmp/%BACKUP_FILE% -C /" 2>> "%LOGFILE%"
if errorlevel 1 (
echo [ERROR] Restore failed! >> "%LOGFILE%"
exit /b 1
)
echo [INFO] Restore completed successfully. >> "%LOGFILE%"
exit /b 0 exit /b 0
REM =========================================================================== REM ===========================================================================
:usage :usage
echo Usage: echo Usage:
echo %SCRIPTNAME% backup [ -n HOST ] [ -u USER ] [ -o OUTPUT ] echo BR_GPT.bat backup [ -n HOST ] [ -u USER ] [ -o OUTPUT ]
echo %SCRIPTNAME% restore [ -n HOST ] [ -u USER ] [ -b BACKUP_FILE ] echo BR_GPT.bat restore [ -n HOST ] [ -u USER ] [ -b BACKUP_FILE ]
echo.
echo Subcommands:
echo backup Backup files from the remote device.
echo restore Restore files to the remote device.
echo.
echo Common Options:
echo -n HOST Hostname or IP of remote device (default: 10.0.0.2)
echo -u USER Username for SSH (default: pi)
echo.
echo Options for 'backup':
echo -o OUTPUT Path/name of the output archive (default: HOST-backup-RANDOM.tgz)
echo.
echo Options for 'restore':
echo -b BACKUP Path to the local backup archive to restore.
echo.
echo Examples:
echo %SCRIPTNAME% backup
echo %SCRIPTNAME% backup -n 10.0.0.2 -u pi -o my-backup.tgz
echo %SCRIPTNAME% restore -b my-backup.tgz
echo.
exit /b 1 exit /b 1