diff --git a/files/ssh-known-hosts-manager.bat b/files/ssh-known-hosts-manager.bat new file mode 100644 index 0000000..4544d2d --- /dev/null +++ b/files/ssh-known-hosts-manager.bat @@ -0,0 +1,243 @@ +@echo off +REM === SSH Known Hosts Manager === +setlocal enabledelayedexpansion + +set SSH_DIR=%USERPROFILE%\.ssh +set KNOWN_HOSTS=%SSH_DIR%\known_hosts +set KNOWN_HOSTS_OLD=%SSH_DIR%\known_hosts.old + +:MENU +cls +echo ======================================== +echo SSH Known Hosts Manager +echo ======================================== +echo. +echo SSH Directory: %SSH_DIR% +echo. + +REM Check if .ssh directory exists +if not exist "%SSH_DIR%" ( + echo ERROR: .ssh directory not found! + echo Directory does not exist: %SSH_DIR% + echo. + pause + exit /b 1 +) + +REM Check which files exist +set HOSTS_EXISTS=0 +set HOSTS_OLD_EXISTS=0 + +if exist "%KNOWN_HOSTS%" set HOSTS_EXISTS=1 +if exist "%KNOWN_HOSTS_OLD%" set HOSTS_OLD_EXISTS=1 + +REM Display available files +echo Available files: +echo. + +if %HOSTS_EXISTS%==0 if %HOSTS_OLD_EXISTS%==0 ( + echo No known_hosts files found! + echo. + pause + exit /b 0 +) + +set FILE_COUNT=0 + +if %HOSTS_EXISTS%==1 ( + set /a FILE_COUNT+=1 + echo [!FILE_COUNT!] known_hosts + set "FILE_1=HOSTS" +) + +if %HOSTS_OLD_EXISTS%==1 ( + set /a FILE_COUNT+=1 + echo [!FILE_COUNT!] known_hosts.old + if %HOSTS_EXISTS%==1 ( + set "FILE_2=HOSTS_OLD" + ) else ( + set "FILE_1=HOSTS_OLD" + ) +) + +echo. +echo [0] Exit +echo. +echo ======================================== +set /p FILE_CHOICE="Select file to manage: " + +if "%FILE_CHOICE%"=="0" goto EXIT + +REM Determine which file was selected +set "SELECTED_FILE=" +set "SELECTED_NAME=" + +if "%FILE_CHOICE%"=="1" ( + if "!FILE_1!"=="HOSTS" ( + set "SELECTED_FILE=%KNOWN_HOSTS%" + set "SELECTED_NAME=known_hosts" + ) else if "!FILE_1!"=="HOSTS_OLD" ( + set "SELECTED_FILE=%KNOWN_HOSTS_OLD%" + set "SELECTED_NAME=known_hosts.old" + ) +) + +if "%FILE_CHOICE%"=="2" ( + if "!FILE_2!"=="HOSTS_OLD" ( + set "SELECTED_FILE=%KNOWN_HOSTS_OLD%" + set "SELECTED_NAME=known_hosts.old" + ) +) + +if "!SELECTED_FILE!"=="" ( + echo Invalid selection! + timeout /t 2 >nul + goto MENU +) + +:FILE_MENU +cls +echo ======================================== +echo Managing: !SELECTED_NAME! +echo ======================================== +echo. +echo [1] View file content +echo [2] Delete specific line +echo [3] Delete entire file +echo [0] Back to file selection +echo. +echo ======================================== +set /p ACTION="Select action: " + +if "%ACTION%"=="1" goto VIEW_FILE +if "%ACTION%"=="2" goto DELETE_LINE +if "%ACTION%"=="3" goto DELETE_FILE +if "%ACTION%"=="0" goto MENU +goto FILE_MENU + +:VIEW_FILE +cls +echo ======================================== +echo Content of !SELECTED_NAME! +echo ======================================== +echo. + +set LINE_NUM=0 +for /f "delims=" %%a in (!SELECTED_FILE!) do ( + set /a LINE_NUM+=1 + echo [!LINE_NUM!] %%a +) + +if %LINE_NUM%==0 ( + echo File is empty +) + +echo. +echo Total lines: %LINE_NUM% +echo. +pause +goto FILE_MENU + +:DELETE_LINE +cls +echo ======================================== +echo Delete Line from !SELECTED_NAME! +echo ======================================== +echo. + +echo Current content: +echo ---------------------------------------- +set LINE_NUM=0 +for /f "delims=" %%a in (!SELECTED_FILE!) do ( + set /a LINE_NUM+=1 + echo [!LINE_NUM!] %%a +) +echo ---------------------------------------- +echo Total lines: %LINE_NUM% +echo. + +if %LINE_NUM%==0 ( + echo File is empty - nothing to delete + pause + goto FILE_MENU +) + +set /p DEL_LINE="Enter line number to delete (0 to cancel): " + +if "%DEL_LINE%"=="0" goto FILE_MENU + +REM Validate input +set "VALID=0" +for /l %%i in (1,1,%LINE_NUM%) do ( + if "%DEL_LINE%"=="%%i" set "VALID=1" +) + +if "%VALID%"=="0" ( + echo Invalid line number! + pause + goto FILE_MENU +) + +echo. +set /p BACKUP="Create backup before deletion? (Y/N): " + +if /i "%BACKUP%"=="Y" ( + copy "!SELECTED_FILE!" "!SELECTED_FILE!.backup" >nul 2>&1 + echo Backup created: !SELECTED_NAME!.backup +) + +echo Deleting line %DEL_LINE%... + +REM Create new file without the specified line +set CURRENT_LINE=0 +(for /f "delims=" %%a in (!SELECTED_FILE!) do ( + set /a CURRENT_LINE+=1 + if not !CURRENT_LINE!==%DEL_LINE% echo %%a +)) > "!SELECTED_FILE!.tmp" + +move /y "!SELECTED_FILE!.tmp" "!SELECTED_FILE!" >nul + +echo. +echo [OK] Line %DEL_LINE% deleted successfully! +echo. +pause +goto FILE_MENU + +:DELETE_FILE +cls +echo ======================================== +echo Delete !SELECTED_NAME! File +echo ======================================== +echo. + +echo WARNING: This will delete the entire !SELECTED_NAME! file! +echo. +set /p CONFIRM="Are you sure? (Y/N): " + +if /i not "%CONFIRM%"=="Y" ( + echo Operation cancelled. + pause + goto FILE_MENU +) + +echo. +set /p BACKUP="Create backup before deletion? (Y/N): " + +if /i "%BACKUP%"=="Y" ( + copy "!SELECTED_FILE!" "!SELECTED_FILE!.backup" >nul 2>&1 + echo Backup created: !SELECTED_NAME!.backup +) + +del /f "!SELECTED_FILE!" >nul 2>&1 + +echo. +echo [OK] !SELECTED_NAME! file deleted! +echo. +pause +goto MENU + +:EXIT +cls +echo Exiting... +timeout /t 1 /nobreak >nul +exit \ No newline at end of file