Contenido del curso
Contenido del curso
Reto 6:
Modificar programa utilityHost. sh para empaquetar los logs generados utilizando algún formato de compresión, colocarle una clave y pasarlo a otra máquina a través de SSH, cuando se seleccione la opción 7. Backup de Información
Johan Andrés Mateus Lamprea
Rodrigo Flores
John Florez
Adan Natanael Segura Galicia
Jorge Clavijo
Miguel Angel Reyes Moreno
Jose Suarez
Jose Suarez
Marvin Javier Santos Fernández
Javier Dario Chungana Erira
freddy molleda
Ingrid Katherine Hernández Aya
John Alexander Ortiz Ramirez
Fernando Jesús Núñez Valdez
Ian Cristian Ariel Yané
liliana.palacios
Fernando Sanchez Chavez
Cristian Camilo Cortes Ortiz
Julian Lamadrid
Juan Antonio Cuahonte Isla
Enzo Venturi
Jared Jafet Mendizabal
#!/bin/bash # Programa que empaqueta, comprime, cifra y envía información a través de rsync # Autor: YoJan option="VariableOption" result="VariableResult" fecha=$(date +"%F_%H") echo "El valor de option: $option" > logOption_$fecha.txt echo "El valor de result: $result" > logResult_$fecha.txt # Empaquetar y comprimir los logs generados echo -e "\nIniciando el empaquetado y compresión con tar y gz....." tar -czvpf logOption_$fecha.tar.gz logOption_$fecha.txt tar -czvpf logResult_$fecha.tar.gz logResult_$fecha.txt sleep 3 # Agregando cifrado con OpenSSL echo -e "\nAgregando cifrado a logOption_$fecha.tar.gz" openssl enc -aes-256-cbc -e -in logOption_$fecha.tar.gz -out logOption_$fecha.tar.gz.enc echo -e "\nAgregando cifrado a logResult_$fecha.tar.gz" openssl enc -aes-256-cbc -e -in logResult_$fecha.tar.gz -out logResult_$fecha.tar.gz.enc # Creando carpeta de backup para mover y transferir echo -e "\nMoviendo los archivos cifrados a una nueva carpeta....." mkdir -m 755 bk_logs mv logOption_$fecha.tar.gz.enc bk_logs mv logResult_$fecha.tar.gz.enc bk_logs sleep 3 # Pasar a un servidor remoto la carpeta bk_logs utilizando rsync read -p "Ingrese host: " host read -p "Ingrese usuario: " user echo -e "\nTransfiriendo los archivos" rsync -avz bk_logs $user@$host:/home/luna
#! /bin/bash option='' while : do #Limpieza de pantalla clear echo "_______________________" echo " Menu de opciones " echo "_______________________" echo -e "\n" echo "1. Instalar Postgres" echo "2. Desinstalar Postgres" echo "3. Crear un backup" echo "4. Restaurar backup" echo "5. empaquetar y comprimir " echo "6. Enviar por ssh " echo "7. Salir" echo -e "\n" read -n1 -p "Elija una Opcion :" option echo -e "\n" case $option in 1) echo "Instalando Postgres...." if [ -f ~/logs/instalandoPostgres.log ]; then echo "El fichero ya existe...>> Agregando log " echo "$(date '+%F %H %M %S') $(whoami)" >> ~/logs/instalandoPostgres.log sleep 3 else echo "el Fichero no existe > creando fichero " echo "$(date '+%F %H %M %S') $(whoami)" > ~/logs/instalandoPostgres.log sleep 3 fi ;; 2) echo "Desinstalando Postgres" date '+%F %H %M %S' > ~/logs/DesinstalandoPosgtres.log sleep 3 ;; 3) echo "Crear Backup " date '+%F %H %M %S'> ~/logs/SacarRespaldo.log sleep 3 ;; 4) echo "Restaurar Backup " date '+%F %H %M %S' > ~/logs/RestaurandoRespaldo.log sleep 3 ;; 5) echo "Empaquetando y comprimiendo todos los logs " tar -cvf Logs.tar ~/logs if [ -e Logs.tar ]; then echo "Comprimiendo el archivos .... status OK!" gzip -9 Logs.tar sleep 3 else echo "No se pudo comprimir... archivo logs.tar no encontrado " fi ;; 6)echo "enviando por SSH " #rsync -avz $(pwd) userDestino@host(ip):direccionDestino sleep 3 ;; 7) echo "Saliendo " exit 0 ;; esac done
Done!
Challenge 6.
# !/bin/bash # Programa que muestra algunas funcionalidades basicas del sistema option=0 usuario=$(logname) fechaArchivo=$(date +"%F") fechaAcceso=$(date +"%Y-%m-%d %H:%M:%S") archivoPath=~/Backup archivoName=log-$fechaArchivo.log if [ -d $archivoPath ]; then if [ -f $archivoPath/$archivoName ]; then echo -e "\nAccedió el usuario: $usuario el día: $fechaAcceso" >> $archivoPath/$archivoName else touch $archivoPath/$archivoName echo -e "\nAccedió el usuario: $usuario el día: $fechaAcceso" >> $archivoPath/$archivoName echo -e "\n Operaciones realizadas:\n" >> $archivoPath/$archivoName fi else mkdir $archivoPath touch $archivoPath/$archivoName echo -e "\nAccedió el usuario: $usuario el día: $fechaAcceso" >> $archivoPath/$archivoName echo -e "\n Operaciones realizadas:\n" >> $archivoPath/$archivoName fi #Impresion del menú while : do clear echo "------------------------------------------------" echo "-------------- Menú Principal ------------------" echo "------------------------------------------------" echo "- 1.- Procesos Actuales -" echo "- 2.- Memoria Disponible -" echo "- 3.- Espacio en Disco -" echo "- 4.- Información de Red -" echo "- 5.- Variables de entorno Configuradas -" echo "- 6.- Información del Programa -" echo "- 7.- Backup Información -" echo "- 8.- Salir -" echo "------------------------------------------------" read -n1 -p "Ingrese la opción deseada [1-8]: " option case $option in 1) clear echo -e "\n\tProcesos Actuales\n" echo -e "\n\tProcesos Actuales\n" >> $archivoPath/$archivoName ps aux ps aux >> $archivoPath/$archivoName echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 2) clear echo -e "\n\tMemoria Disponible\n" echo -e "\n\tMemoria Disponible\n" >> $archivoPath/$archivoName free -h free -h >> $archivoPath/$archivoName echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 3) clear echo -e "\n\tMemoria en disco\n" echo -e "\n\tMemoria en disco\n" >> $archivoPath/$archivoName du -h du -h >> $archivoPath/$archivoName echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 4) clear echo -e "\n\tInformación de Red\n" echo -e "\n\tInformación de Red\n" >> $archivoPath/$archivoName ifconfig ifconfig >> $archivoPath/$archivoName echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 5) clear echo -e "\n\tVariables de entorno configuradas\n" echo -e "\n\tVariables de entorno configuradas\n" >> $archivoPath/$archivoName printenv printenv >> $archivoPath/$archivoName echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 6) clear echo -e "\n\tInformación del Sistema\n" echo -e "\n\tInformación del Sistema\n" >> $archivoPath/$archivoName echo -e "\tPrograma que realiza funcionalidades basicas del OS" echo -e "\tAutor: Adan Galicia" echo -e "\tInformacón de contacto: algo9854@gmail.com" echo -e "\n" read -n1 -p "Presione una tecla para continuar..." ;; 7) clear echo -e "\n\tBackup Información\n" echo -e "\n\tRealizacion de Backup\n" >> $archivoPath/$archivoName read -p "Ingrese el host: " host read -p "Ingrese el usuario: " user read -p "Ingrese la ruta en donde quiera hacer el backup: " ruta zip -e backup-$fechaArchivo.zip $archivoPath/*.log rsync -avz backup-$fechaArchivo.zip $user@$host:$ruta ;; 8) clear echo -e "\n\tAdios!\n" exit ;; *) clear echo -e "\n\tOpción no encontrada\n" read -n1 -p "Presione una tecla para continuar..." ;; esac done
Reto 6, Crea x cantidad de archivos *log.txt y los empaqueta y transferie a través de rsync a mi mobile Android.
Usando SSHelper rsync
rsync2
#!/bin/bash #Reto 6 + Empaquetar los logs en un formato de compresión # + Colocar una clave # + Enviarlo a otra máquina a mi cel # + Cuando se selecciona la op 7 reps="" echo "***********Bienvenido al reto 6*******************" echo "For para crear logs" read -n1 -p "Ingrese el número de logs a crear: " reps for ((i=1;i<=reps;i++)) do cat <<EOM> $(date +%T.%3N)log.txt $(date +%Y%m%d-%H:%M%S) EOM echo "******" echo "**$i**" echo "******" sleep 3 done tar -cvf 6fileLogs.tar *log.txt zip -e 6fileLogs.tar.zip 6fileLogs.tar echo -e "\n Se va a pedir la clave de tu Android" rsync -avh -e 'ssh -p 2222' 6fileLogs.tar u0_a134@192.168.20.24:/data/data/com.arachnoid.sshelper/home/SDCard/Download
\#!/bin/bash \# Prompt user for date and time components echo "Enter the year (yyyy):" read year echo "Enter the month (MM):" read month echo "Enter the day (DD):" read day echo "Enter the hour (HH):" read hour echo "Enter the minutes (mm):" read minutes echo "Enter the seconds (SS):" read seconds \# Validate input to ensure proper formatting (optional) if \[\[ ! $year =~ ^\[0-9]{4}$ || ! $month =~ ^\[0-9]{2}$ || ! $day =~ ^\[0-9]{2}$ || ! $hour =~ ^\[0-9]{2}$ || ! $minutes =~ ^\[0-9]{2}$ || ! $seconds =~ ^\[0-9]{2}$ ]]; then   echo "Invalid input. Please use the correct formats (e.g., yyyy for year, MM for month, etc.)."   exit 1 fi \# Construct the filename filename="log${year}${month}${day}${hour}${minutes}${seconds}.log" \# Create the log file touch "$filename" echo "Log file '$filename' created successfully." \# Ask user for hostname and path for file transfer echo "Enter the hostname of the destination computer:" read hostname echo "Enter the destination path on the remote computer:" read remote\_path \# Zip the log files zip\_file="logs.zip" zip "$zip\_file" log\*.log \# Send the zipped file to the remote computer scp "$zip\_file" "$hostname":"$remote\_path" if \[ $? -eq 0 ]; then   echo "Log files successfully sent to $hostname:$remote\_path." else   echo "Failed to send log files. Please check the hostname and path." fi
Mi Reto va de la siguiente forma:
#!/bin/bash # Reto 6 # Autor: Jose Suarez fecha=`date +%Y%m%d%H%M%S` usuario=$(logname) archivo=log-`date +%Y%m%d%H%M%S`.log host="" user="" touch $archivo echo -e "\n" #Agregar información del usuario echo "Script ejecutado por el usuario: $usuario " >> $archivo echo -e "\n" #Agrego la fecha echo "En la Fecha: $fecha " >> $archivo #Menu while : do #Limpiar pantalla clear echo -e "\n" echo "************************************************" echo "******************OPCIONES**********************" echo "************************************************" echo -e "\n" echo "******* 1.- Procesos Actuales ******************" echo "******* 2.- Memoria Disponible *****************" echo "******* 3.- Espacio en Disco *******************" echo "******* 4.- Información de Red *****************" echo "******* 5.- Variables de entorno Configuradas **" echo "******* 6.- Información del Programa ***********" echo "******* 7.- Backup Información *****************" echo "******* 8.- Salir ******************************" echo -e "\n" echo "************************************************" read -n1 -p "Ingrese una opción (1-8): " option clear echo -e "\nLa opcion seleccionada fue $option " >> $archivo clear case $option in 1) clear echo -e "\nProcesos Actuales" ps -u echo -e "\n" sleep 6 ;; 2) clear echo -e "\nMemoria Disponible" free -h echo -e "\n" sleep 6 ;; 3) clear echo -e "\nEspacio en disco" df -h echo -e "\n" sleep 3 ;; 4) clear echo -e "\nInformación de Red" netstat -r echo -e "\n" sleep 3 ;; 5) clear echo -e "\nVariables de Entorno Configuradas" echo $PATH echo -e "\n" sleep 5 ;; 6) clear echo -e "\nInformación del Programa" echo -e "\nDesarrollado por RastComputer" echo -e "\nVersion 1.0" echo -e "\nAño 2020" sleep 3 ;; 7) clear echo -e "\nBackup Información " echo -e "\n Se le solicitara una clave de encriptado del backup de logs\n" zip -e backup.zip *.log sleep 2 clear read -p "Ingrese el host para la copia remota del backup: " host echo -e "\n" read -p "Ingrese el nombre del Usuario para coneccion remota: " user clear echo -e "\n En este momento se procederá a transferir el archivo\n" rsync -avz $(pwd) $user@$host:/home/btk echo -e "\n" sleep 3 ;; 8) clear echo -e "\nHasta la vista baby" sleep 3 clear exit 0 ;; esac done
En la parte de rsync envie todo lo de la carpeta actual mediante el compado pwd. Tambien se puede enviar solo el archivo back.zip de la siguiente manera:
rsync -avz backup.zip $user@$host:/home/platzi```
mi aporte del Reto 6:
#!/bin/bash # clase 38 reto 6 # Autor: Javier Ch. - @javich validOpcion='^[1-8]$' procAct=$(ps) memDisp=$(free -h) espDisk=$(df -h) infRed=$(ifconfig) varEnt=$(env) infProg=$(ls) dates=$(date +"%Y%m%d") while : do clear echo "--------------------------------" echo " ESTADO MAQUINA " echo "--------------------------------" echo "1. Procesos Actuales" echo "2. Memoria Disponible" echo "3. Espacio en Disco" echo "4. Informació de Red" echo "5. Variables de Entorno Configuradas" echo "6. Información Programa" echo "7. Backup informacion" echo "8. Salir" read -n1 -p "Digite el numero de la opcion:" opcion if [[ $opcion =~ $validOpcion ]]; then echo -e "\n" case $opcion in 1) echo -e "Procesos Actuales:\n$procAct\n" > opcion01_$dates.log cat opcion01_$dates.log read -p "presione enter para volver al menu" ;; 2) echo -e "Memoria Disponible:\n$memDisp\n" > opcion02_$dates.log cat opcion02_$dates.log read -p "presione enter para volver al menu" ;; 3) echo -e "Espacio en Disco:\n$espDisk\n" > opcion03_$dates.log cat opcion03_$dates.log read -p "presione enter para volver al menu" ;; 4) echo -e "Informacion de red:\n$infRed\n" > opcion04_$dates.log cat opcion04_$dates.log read -p "presione enter para volver al menu" ;; 5) echo -e "Variables de Entorno:\n$varEnt\n" > opcion05_$dates.log cat opcion05_$dates.log read -p "presione enter para volver al menu" ;; 6) echo -e "Informacion Programa:\n$infProg\n" > opcion06_$dates.log cat opcion06_$dates.log read -p "presione enter para volver al menu" ;; 7) echo "Backup:\n" echo -e "Asigne contraseña al comprimido" zip -e LogsReto6.zip *.log echo -e "\n" if [ -f LogsReto6.zip ]; then echo "A continuacion digite la info de la maquina donde se enviara el Backup" read -p "ingrese el host de la maquina: " host read -p "ingrese el usuario: " user read -p "ingrese ruta para backup: " path echo "Enviando backup a la maquina idicada..." rsync -av LogsReto6.zip $user@$host:$path else echo "no se genero el comprimido" fi read -p "presione enter para volver al menu" ;; 8) echo "Salir" exit 0 ;; esac else echo -e "\n[ERROR]: La opcion ingresada no es Valida." read -p "Presione enter para regresar al menu" fi done
DONE nota: el comando donde se envia el archivo comprimido a otro equipo remoto esta comentado porque no tengo otro equipo con linux en mi red con el que pueda hacer la prueba, en su lugar puse un ejemplo general
#! /bin/bash option=0 ini=0 while : do if [ $ini == 0 ]; then for ((i=0;i<3;i++)) do clear echo "███████████████████████████" echo "███████▀▀▀░░░░░░░▀▀▀███████" echo "████▀░░░░░░░░░░░░░░░░░▀████" echo "███│░░░░░░░░░░░░░░░░░░░│███" echo "██▌│░░░░░░░░░░░░░░░░░░░│▐██" echo "██░└┐░░░░░░░░░░░░░░░░░┌┘░██" echo "██░░└┐░░░░░░░░░░░░░░░┌┘░░██" echo "██░░┌┘ ░░░░░ └┐░░██" echo "██▌░│ ░░░ │░▐██" echo "███░│ ░░ ░░ │░███" echo "██▀─┘░░░░░░░ ░░░░░░░└─▀██" echo "██▄░░░ ░░ ░░ ░░░▄██" echo "████▄─┘ ░░░░░░░ └─▄████" echo "█████░░ ─┬┬┬┬┬┬┬─ ░░█████" echo "████▌░░░ ┬┼┼┼┼┼┼┼ ░░░▐████" echo "█████▄░░░└┴┴┴┴┴┴┴┘░░░▄█████" echo "███████▄░░░░░░░░░░░▄███████" echo "██████████▄▄▄▄▄▄▄██████████" echo "███████████████████████████" echo "LOADING...LOADING...LOADING" sleep 0.3 clear echo "███████████████████████████" echo "███████▀▀▀░░░░░░░▀▀▀███████" echo "████▀░░░░░░░░░░░░░░░░░▀████" echo "███│░░░░░░░░░░░░░░░░░░░│███" echo "██▌│░░░░░░░░░░░░░░░░░░░│▐██" echo "██░└┐░░░░░░░░░░░░░░░░░┌┘░██" echo "██░░└┐░░░░░░░░░░░░░░░┌┘░░██" echo "██░░┌┘▄▄▄▄▄░░░░░▄▄▄▄▄└┐░░██" echo "██▌░│██████▌░░░▐██████│░▐██" echo "███░│▐███▀▀░░▄░░▀▀███▌│░███" echo "██▀─┘░░░░░░░▐█▌░░░░░░░└─▀██" echo "██▄░░░▄▄▄▓░░▀█▀░░▓▄▄▄░░░▄██" echo "████▄─┘██▌░░░░░░░▐██└─▄████" echo "█████░░▐█─┬┬┬┬┬┬┬─█▌░░█████" echo "████▌░░░▀┬┼┼┼┼┼┼┼┬▀░░░▐████" echo "█████▄░░░└┴┴┴┴┴┴┴┘░░░▄█████" echo "███████▄░░░░░░░░░░░▄███████" echo "██████████▄▄▄▄▄▄▄██████████" echo "███████████████████████████" echo ".....LOADING.....LOADING..." sleep 0.3 clear done ini=1 else clear echo "_________________________________________" echo "PGUTIL - Programa de Utilidad de Postgres" echo "_________________________________________" echo " MENU PRINCIPAL " echo "_________________________________________" echo "1. Instlar Postgres" echo "2. Desintalar Postgres" echo "3. Sacar un respaldo" echo "4. Restaurar respaldo" echo "5. Salir" read -n1 -p "Ingrese una opcion [1-5]: " option echo -e "\n\n" case $option in 1) echo -e "Instalando" echo "Instalacion completada | usuario $(whoami) | $(date +'%d/%m/%Y %H:%M')" >> ./log/log_instalacion.txt sleep 2 ;; 2) echo "Desintalando" echo "Desinstalacion completada | usuario $(whoami) | $(date +'%d/%m/%Y %H:%M')" >> ./log/log_desinstalacion.txt sleep 2 ;; 3) echo "Respaldando" echo "respaldo completado | usuario $(whoami) | $(date +'%d/%m/%Y %H:%M')" >> ./log/log_respaldo.txt zip -e all_logs.zip ~/Desktop/script/proyecto/log/*.txt # rsync -avz $(pwd) userDestino@host(ip):direccionDestino sleep 2 ;; 4) echo "Restaurando" echo "restauracion completada | usuario $(whoami) | $(date +'%d/%m/%Y %H:%M')" >> ./log/log_restauracion.txt sleep 2 ;; 5) echo "Saliendo" echo "usuario $(whoami) salio del sistema | $(date +'%d/%m/%Y %H:%M')" >> ./log/log_usuario.txt exit 0 ;; esac fi donex
buen dia , como es que hace las calaveras , se ve interesante , gracias
Este es mi reto con algunos pequeños cambios
#!/bin/bash #Exercise # mainDir="Logs" option=0 mkdir $mainDir > /dev/null while : do clear echo "______________________________" echo " STATUS SYSTEM " echo "______________________________" echo " MAIN MENU " echo "1. Current Processes" echo "2. Available Memory" echo "3. Disk Space" echo "4. Red Information" echo "5. Configured Environment Variables" echo "6. Program information" echo "7. Backup information" echo "8. Exit" read -n1 -p "Insert a option:" option dateStr=$(date "+%Y_%m_%d_%H_%M_%S") nameFile="./$mainDir/Log_$dateStr.log" case $option in 1) echo -e "\n Current Processes " >> $nameFile ps aux | grep $(whoami) >> $nameFile cat $nameFile ;; 2) echo -e "\n Available Memory " >> $nameFile awk '/MemAvailable/ {printf "%.4fGB\n", $2/(1024*1024)}' /proc/meminfo>> $nameFile cat $nameFile ;; 3) echo -e "\n Disk Space " >> $nameFile df -h | awk 'NR==1 || /^\/dev/' >> $nameFile cat $nameFile # Print first line NR==1 or (||) search /dev/ ;; 4) echo -e "\n Red Information ">> $nameFile ip addr show>> $nameFile cat $nameFile ;; 5) echo -e "\n Configured Environment Variables ">> $nameFile env | sort>> $nameFile cat $nameFile ;; 6) echo -e "\n Program information ">> $nameFile echo "V0.0.1">> $nameFile cat $nameFile ;; 7) echo -e "\n Backup information " nameBackup="./$mainDir/Backup_$dateStr.tar" numberFiles=$(find ./$mainDir -regex ".*log" | wc -l) files=$(find ./$mainDir -regex ".*log") if [ $numberFiles -gt 0 ]; then if tar -cf $nameBackup $files; then if pbzip2 -f $nameBackup; then rm $files echo "Backup Completed $nameBackup.bz2" else echo "Error to use pbzip2" fi else echo "Program could not packing files" fi else echo "There is not files to save" fi ;; 8) echo -e "\nGoodBye" exit 0 ;; *) echo -e "\nValue is not correct" ;; esac read -n1 -r -p "Press any key to continue..." done
#!/bin/bash # Reto 5 # Modificar el archivo utilityHost.sh para escribir la información solicitada a un archivo de log cuyo nombre será log donde yyyy representa el año, MM el mes, DD el día, HH la hora, mm los minutos y SS los segundos # Reto 6 Modificar programa utilityHost. sh para empaquetar los logs generados utilizando algún formato de compresión, colocarle una clave y pasarlo a otra máquina a través de SSH, cuando se seleccione la opción 7. Backup de Información read -p "Introduce el valor primer valor: " option read -p "Introduce el segundo valor: " result echo "El valor de option es: $option" echo "El valor de result es: $result" # Crear log y agregar las variables file_name=$(date '+%Y%m%d%H%M%S').txt touch $file_name echo "El archivo fue creado exitosamente" echo "El valor de option es: $option" >> $file_name echo "El valor de result es: $result" >> $file_name if [ $1 == 'b' ]; then month=$(date '+%Y%m') file_backedup=backups$(date '+%b').tar.gz.enc echo "Empaquetando..." sleep 1 echo "Comprimiendo..." sleep 1 echo "Encriptando" sleep 1 tar -cz $month*.txt | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -e > $file_backedup echo "Comprobando existencia de folder para logs ..." sleep 1 if [ -d bk_logs ]; then echo "Moviendo $file_backedup a bk_logs ..." sleep 1 mv $file_backedup bk_logs else echo "Creando carpeta bk_logs ..." mkdir bk_logs sleep 1 echo "Moviendo $file_backedup a bk_logs" sleep 1 mv $file_backedup bk_logs fi echo "Transferir carpeta a un host externo ..." read -p "y/n: " choice if [ $choice == 'y' ]; then read -p "Host: " host read -p "Usuario: " usuario echo "Transfiriendo ..." sleep 1 #rsync -avz bk_logs $user@$host:/home/luna echo "Transferido" fi echo "File $file_backedup backed up." fi
#!/bin/bash :` Modificar programa utilityHost. sh para empaquetar los logs generados utilizando algún formato de compresión, colocarle una clave y pasarlo a otra máquina a través de SSH, cuando se seleccione la opción 7. Backup de Información ` # Función para validar entrada con expresión regular function validar_entrada { local entrada read -p "$1" entrada while [[ ! $entrada =~ $2 ]]; do echo "Entrada no válida. $3" read -p "$1" entrada done echo "$entrada" } # Expresiones regulares regex_ano="^[0-9]{4}$" regex_mes="^[0-9]{2}$" regex_dia="^(0[1-9]|[1-2][0-9]|3[0-1])$" regex_hora="^(0[0-9]|1[0-9]|2[0-3])$" regex_minuto="^[0-5][0-9]$" # Solicitar y validar la información del usuario ano=$(validar_entrada "Ingresa el año (YYYY): " "$regex_ano" "Debe tener el formato YYYY (cuatro dígitos).") mes=$(validar_entrada "Ingresa el mes (MM): " "$regex_mes" "Debe tener el formato MM (dos dígitos).") dia=$(validar_entrada "Ingresa el día (DD): " "$regex_dia" "Debe estar entre 01 y 31.") hora=$(validar_entrada "Ingresa la hora (HH): " "$regex_hora" "Debe estar entre 00 y 23.") minutos=$(validar_entrada "Ingresa los minutos (MM): " "$regex_minuto" "Debe estar entre 00 y 59.") # Crear el nombre del archivo de log basado en la fecha y hora ingresadas nombre_log="${ano}_${mes}_${dia}_${hora}_${minutos}_fecha.log" # Escribir la información en el archivo de log echo "${ano}:${mes}:${dia} ${hora}:${minutos}" >> "$nombre_log" gzip -9 $(./{$nombre_log}) archivo_comprimido="$nombre_log.zip" echo "La información se ha registrado y comprimido en el archivo $archivo_comprimido." host="" usuario="" read -p "Ingresar el host:" host read -p "Ingresar el usuario:" usuario echo -e "\nEn este momento se procederá a empaquetar la carpeta y transferirla según los datos ingresados" rsync -avz $(pwd) $usuario@$host:/Users/martosfre/Downloads/platzi
! /bin/bash
Programa para completar el reto 5
Autor: Liliana Palacios
#Leer los datos del usuario - capturar información read -n1 -p "Ingrese una opción [1-9]:" opcion
#Validar la opción ingresada case $opcion in 1) echo -e "\nProcesos Actuales....." sleep 3 ;; 2) echo -e "\nMemoria Disponible...." sleep 3 ;; 3) echo -e "\nEspacio en Disco..." sleep 3 ;; 4) echo -e "\nInformación de Red..." sleep 3 ;; 5) echo -e "\nVariables de Entorno Configuradas....." sleep 3 ;; 6) echo -e "\nInformación Programa...." sleep 3 ;; 7) echo -e "\nBackup información..." echo "Empaquetar todos los scripts de la carpeta shellCourse y transferirlos por la red a otro equpoutilizando el comando rsync"
host="" usuario="" read -p "Ingresar el host:" host read -p "Ingresar el usuario:" usuario echo -e "\nEn este momento se procederá a empaquetar la carpeta y transferirla según los datos ingresados" rsync -avz $(pwd) $usuario@$host:/Users/usuario/Downloads/newFolder ;; 8) echo -e "\nIngrese una opción..." sleep 3 ;; 9) echo "Salir del Programa" exit 0 ;;
esac
mi solucion al reto antes recuerden que hay que habilitar o instalar open-ssh para que funcione
# !/bin/bash # Programa Reto 6 # Programa para zifrar un archivo y enviarlo con SSH # a otro HOST # Autor: Fernando Octavio @ZerialKiller echo -e "Reto 6 Cifrar y Enviar Archivos\n" fileZip="Shell_course_origin.zip" host="" user="" echo -e "\nBackup Information..... " zip -e $fileZip *.sh echo -e "\nTransferir Backup" read -p "Ingresar el Host: " host read -p "ingregar el usuario: " user rsync -avz $fileZip $user:$host:/home/milo/clone
Código
#!/bin/bash # Create a menu with the following options: # 1. Current proccesses. # 2. Available memory. # 3. Disk space. # 4. Network information. # 5. Enviromment variables set. # 6. Program information. # 7. Backup information. # 8. Exit. # After this we will retrieve the option entered, validate it and print the option and the titile according to what was entered. # Modify the program to pack the generated logs using some compression format, put a key in it and pass it to another machine through SSH, when selecting option 7. choose=0 host= user= ipRegEx='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' while : do echo "********************************************************" echo "************************* SCRIPT ***********************" echo "********************************************************" echo "****************** ADMINISTRATION TOOLS ****************" echo "* 1) Current proccesses *" echo "* 2) Available memory *" echo "* 3) Disk space *" echo "* 4) Network information *" echo "* 5) Enviroment variables set *" echo "* 6) Program information *" echo "* 7) Backup information and send with SSH *" echo "* 8) Exit *" echo "********************************************************" read -p "Please enter a number from (1 - 8): " choose while [[ $choose -lt 1 ]] || [[ $choose -gt 8 ]]; do echo "***************** INCORRECT VALUE **********************" read -p "Please enter a number from (1 - 8): " choose done echo "********************************************************" case $choose in "1") echo -e "\n" echo "********************************************************" echo "This is the current proccesses:" echo "*********************** WAIT ***************************" sleep 1 ps ax echo "*********************** DONE ***************************" echo -e "\n" ;; "2") echo -e "\n" echo "********************************************************" echo "This is the available memory:" echo "*********************** WAIT ***************************" sleep 1 free echo "*********************** DONE ***************************" echo -e "\n" ;; "3") echo -e "\n" echo "********************************************************" echo "This is the disk space:" echo "*********************** WAIT ***************************" sleep 1 df -h echo "*********************** DONE ***************************" echo -e "\n" ;; "4") echo -e "\n" echo "********************************************************" echo "This is the network information:" echo "*********************** WAIT ***************************" sleep 1 ifconfig echo "*********************** DONE ***************************" echo -e "\n" ;; "5") echo -e "\n" echo "********************************************************" echo "This is the enviromment variables set:" echo "*********************** WAIT ***************************" sleep 1 env echo "*********************** DONE ***************************" echo -e "\n" ;; "6") echo -e "\n" echo "********************************************************" echo "This is the program information:" echo "*********************** WAIT ***************************" sleep 1 dpkg -l echo "*********************** DONE ***************************" echo -e "\n" ;; "7") echo -e "\n" echo "********************************************************" echo "This is the backup information:" echo "********************************************************" sleep 1 echo "****************** SET PASSWORD ************************" zip -e backup.zip *.sh echo ">./backup.zip" echo "******************** BACKUP DONE ***********************" read -p "Please enter a host IP destination: " host while [[ ! $host =~ $ipRegEx ]]; do echo "***************** INCORRECT VALUE **********************" read -p "Please enter a host IP destination: " host done read -p "Please enter a user name destination: " user while [[ -z $user ]]; do echo "***************** INCORRECT VALUE **********************" read -p "Please enter a user name destination: " user done echo "*********************** WAIT ***************************" rsync -avhz ./backup.zip $user@$host:~/Downloads echo "********************************************************" echo "The file: backup.zip was sent to $user@$host:~/Downloads" echo "******************** FILE SENT *************************" echo -e "\n" ;; "8") echo -e "\n" echo "********************************************************" echo "*********************** WAIT ***************************" echo "Quitting..." sleep 1 echo "*********************** DONE ***************************" exit 0 esac done echo "********************** SCRIPT ENDED ********************"
Reto 6 Julian Lamadrid (litocruz)
#!/bin/bash # Reto 6 # Modificar programa utilityHost.sh para empaquetar los logs generados # utilizando algún formato de compresión, colocarle una clave y pasarlo a otra máquina a través de SSH, # cuando se seleccione la opción 7. Backup de Información # Autor: julian lamadrid, jlamadrid, litocruz #declaracion variables option=$2 comando=$1 cantidad=$# menu=0 file="log-$(date +%Y%m%d%H%m%S).log" host="" usuario="" path="" while : do #Limpiar pantalla clear #Desplegar menu opciones echo "-----------------------------------------" echo " Programa de utilidades" echo "-----------------------------------------" echo " MENU PRINCIPAL " echo "1. Procesos Actuales" echo "2. Memoria Disponible" echo "3. Espacio en disco" echo "4. Informacion de red" echo "5. Variables de entorno configuradas" echo "6. Informacion Programa" echo "7. Backup Informacion" echo "8. Exit" # Leer los datos del usuario - capturar info read -n1 -p "Ingrese menu$ del [1-8]:" menu #Validar menu$ ingresada case $menu in 1) echo -e "\nProcesos Actuales" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- ps -fax" >> $file ps -fax read -n1 -p "Presione una tecla para salir" ;; 2) echo -e "\nMemoria Disponible" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- free -h" >> $file free -h read -n1 -p "Presione una tecla para salir" ;; 3) echo -e "\nEspacio en disco" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- df -h" >> $file df -h read -n1 -p "Presione una tecla para salir" ;; 4) echo -e "\nInformacion de red" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- ip a" >> $file ip a read -n1 -p "Presione una tecla para salir" ;; 5) echo -e "\nVariables de entorno configuradas" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- env " >> $file env read -n1 -p "Presione una tecla para salir" ;; 6) echo -e "\nInformacion Programa" echo "[$(date +%Y%m%d%H%m%S)] [$(whoami)] --- dpkg -l " >> $file dpkg -l read -n1 -p "Presione una tecla para salir" ;; 7) echo -e "\nBackup Informacion..." read -p "Ingrese el host/ip al cual transferir el backup:" host read -p "Ingrese el usuario: " user read -p "Ingrese el destino como path absoluto: " path zip -e shellCourse.zip *.log rsync -azv shellCourse.zip $user@$host:$path ;; 8) echo -e "\nSaliendo..." exit 0 ;; esac done
Reto 6
# !/bin/bash # Reto 6 # Menu de opciones que imprime la opción seleccionada # Author: Juan Antonio Cuahonte Isla - 16/12/21 option=0 while : do # Limpiar la pantalla clear # Desplegar el menú de opciones echo "--------------------------------------------" echo "PCUTIL - Programa de utilidad para tu equipo" echo "--------------------------------------------" echo " MENU PRINCIPAL " echo "--------------------------------------------" echo "1. Procesos Actuales" echo "2. Memoria Disponible" echo "3. Espacio en Disco" echo "4. Información de Red" echo "5. Variables de Entorno Configuradas" echo "6. Información Programa" echo "7. Backup de información" echo "8. Salir" # Leer los datos del usuario read -n1 -p "Ingrese una opción [1-8]: " option # Validar la opción ingresada case $option in 1) echo -e "\nMostrar Procesos Actuales....." sleep 3 ;; 2) echo -e "\nMostrar Memoria Disponible....." sleep 3 ;; 3) echo -e "\nMostrar Espacio en Disco....." sleep 3 ;; 4) echo -e "\nMostrar Información de Red....." sleep 3 ;; 5) echo -e "\nMostrar Variables de Entorno Configuradas....." sleep 3 ;; 6) echo -e "\nMostrar Información Programa....." sleep 3 ;; 7) echo -e "\nRealizando Backup de información....." tar -cvf log.tar log.txt bzip2 -f log.tar zip -e log.zip log.tar.bz2 usuario="" host="" echo "A continuación ingresará los datos de envío" read -p "Ingresar el host: " host read -p "Ingresar el usuario: " usuario echo -e "\nEn éste momento se procederá a empaquetar la carpeta y transferirla según los datos ingrasados" rsync -avz $(pwd) $usuario@$host:/home/juan ;; 8) echo -e "\nSalir del Programa....." exit 0 ;; *) echo "Elige una opción válida" ;; esac done
Reto completado, aunque no me convence la estructura :/
#!/bin/bash echo "Hey!" read -p "Do you want to send a file? (0/1): " Pick if [ $Pick == 0 ]; then read -p "Enter the host: " host read -p "Enter the user: " user echo "... "; sleep 3 read -p "Enter the directory name" file read -p "Enter destiny: " destiny echo "Delivering..."; sleep 1 echo "" rsync -avz $file $user@$host:$direct else echo "See you!" fi
Agrego solo el fragmento correspondiente a la funcion 7:
fechaBack=$(date +"%F") nomBack=backupScripts$fechaBack.zip echo -e "\n${arrOps[6]}" echo -e "\nArmando Respaldo..." zip -e $nomBack *.sh read -p "Ingrese la ip donde se guardara el respaldo: " iphost read -p "Ingrese el usuario del host donde se hara el respaldo: " user read -p "Ingrese la ruta donde se guardara el respaldo: " ruta rsync -avz $nomBack $user@$iphost:$ruta sleep 3 ;;