se agrego cifrado de credenciales con openssl

This commit is contained in:
2025-08-16 03:21:15 -03:00
parent 2d3ef2c612
commit 025b9f1541
3 changed files with 97 additions and 85 deletions

View File

@ -1,77 +1,55 @@
# 🛠️ Git Subir Automatización de Push con Gitea # 🛠️ git subir
Este paquete te permite ejecutar `git subir` como un comando personalizado que: Comando personalizado para subir cambios a un repositorio Gitea con autenticación automática, manejo de conflictos y commits interactivos.
- Detecta cambios sin commitear
- Realiza commit automático si lo deseás
- Maneja push con credenciales de Gitea
- Resuelve conflictos de merge automáticamente
- Valida credenciales antes de instalarse
--- ---
## 📦 Instalación ## 🚀 Instalación
```bash ```bash
chmod +x instalar-subir.sh
./instalar-subir.sh ./instalar-subir.sh
Durante la instalación se te pedirá:
Usuario de Gitea Verifica e instala openssl si falta.
Contraseña o token Solicita usuario y token de Gitea.
Validación automática contra el servidor Verifica credenciales contra la API.
🚀 Uso Permite guardar credenciales cifradas o en texto plano.
Desde cualquier repositorio Git:
bash Crea el comando global git subir.
git subir
El script:
Detecta cambios sin commitear Seguridad
Las credenciales pueden guardarse cifradas con openssl.
Te pregunta si querés hacer commit automático Se descifran al ejecutar git subir mediante contraseña.
Intenta hacer git push con tus credenciales
Si falla, hace git pull --allow-unrelated-histories
Detecta conflictos y te pregunta si querés hacer merge automático
🧹 Desinstalación 🧹 Desinstalación
bash bash
chmod +x desinstalar-subir.sh
./desinstalar-subir.sh ./desinstalar-subir.sh
Esto elimina: Elimina el comando, el script y las credenciales.
El alias git subir ✨ Funcionalidades de git subir
Detecta cambios sin commitear y ofrece hacer commit automático.
El script principal Realiza git push con autenticación embebida.
Las credenciales guardadas Si el push falla, intenta git pull --allow-unrelated-histories.
📁 Archivos creados Detecta conflictos y ofrece merge automático.
~/.scripts/git-subir.sh: script principal
~/.scripts/.env: credenciales (modo seguro) Muestra mensajes claros y estructurados.
/usr/local/bin/git-subir: alias ejecutable 📦 Requisitos
openssl
🔐 Seguridad
Las credenciales se guardan en modo 600 (solo lectura para el usuario).
No se comparten ni se suben a ningún repositorio.
Podés borrarlas en cualquier momento con el desinstalador.
🧩 Requisitos
Git instalado
Acceso a Gitea con token o contraseña
Permisos para escribir en /usr/local/bin
🧠 Autor 🧠 Autor
Este sistema fue diseñado para automatizar flujos Git en entornos con Gitea, optimizando la experiencia de push y manejo de conflictos. Nahuel Baglietto — Scripts diseñados para mejorar la experiencia de trabajo con Git y Gitea.
Código
---
¿Querés que también agregue una opción en el instalador para instalar el comando solo

8
desinstalar-subir.sh Normal file → Executable file
View File

@ -1,13 +1,11 @@
#!/bin/bash #!/bin/bash
set -e set -e
echo "🧹 Eliminando alias git-subir..." echo "🧹 Desinstalando git subir..."
sudo rm -f /usr/local/bin/git-subir sudo rm -f /usr/local/bin/git-subir
echo "🧹 Eliminando script principal..."
rm -f "$HOME/.scripts/git-subir.sh" rm -f "$HOME/.scripts/git-subir.sh"
echo "🧹 Eliminando credenciales..."
rm -f "$HOME/.scripts/.env" rm -f "$HOME/.scripts/.env"
rm -f "$HOME/.scripts/.env.enc"
echo "✅ Desinstalación completa." echo "✅ Desinstalación completa."

View File

@ -1,15 +1,77 @@
#!/bin/bash #!/bin/bash
set -e set -e
# 📁 Crear directorio de scripts echo "🔧 Instalación del comando git subir"
# 📦 Verificar openssl
if ! command -v openssl &> /dev/null; then
echo "⚠️ openssl no está instalado. Instalando..."
if command -v apt &> /dev/null; then
sudo apt update && sudo apt install -y openssl
elif command -v pacman &> /dev/null; then
sudo pacman -Sy --noconfirm openssl
else
echo "❌ No se pudo instalar openssl automáticamente. Instalalo manualmente."
exit 1
fi
fi
# 📁 Crear carpeta
mkdir -p "$HOME/.scripts" mkdir -p "$HOME/.scripts"
# 📜 Copiar script principal # 🔄 Reconfigurar si existen credenciales
if [[ -f "$HOME/.scripts/.env" || -f "$HOME/.scripts/.env.enc" ]]; then
read -p "⚠️ Ya existen credenciales. ¿Querés reconfigurarlas? (s/n): " reconfig
[[ "$reconfig" != "s" ]] && echo "🚫 Instalación cancelada." && exit 0
fi
# 🔐 Solicitar credenciales
read -p "👤 Usuario de Gitea: " GITEA_USER
read -s -p "🔑 Token o contraseña: " GITEA_TOKEN
echo ""
read -p "🌐 URL base de la API de Gitea (ej: https://gitea.midominio.org): " GITEA_API_URL
# 🔎 Verificar credenciales
response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" "$GITEA_API_URL/api/v1/user")
if ! echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then
echo "❌ Credenciales inválidas. Abortando instalación."
exit 1
fi
# 🔐 Cifrar si desea
read -p "¿Querés guardar las credenciales cifradas con openssl? (s/n): " cifrar
if [[ "$cifrar" == "s" ]]; then
echo "🔐 Ingresá una contraseña para cifrar:"
read -s passphrase
echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" | \
openssl enc -aes-256-cbc -salt -out "$HOME/.scripts/.env.enc" -pass pass:"$passphrase"
rm -f "$HOME/.scripts/.env"
echo "✅ Credenciales cifradas guardadas."
else
echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" > "$HOME/.scripts/.env"
chmod 600 "$HOME/.scripts/.env"
rm -f "$HOME/.scripts/.env.enc"
echo "⚠️ Credenciales guardadas sin cifrar."
fi
# 📜 Script principal
cat <<'EOF' > "$HOME/.scripts/git-subir.sh" cat <<'EOF' > "$HOME/.scripts/git-subir.sh"
#!/bin/bash #!/bin/bash
set -e set -e
source "$HOME/.scripts/.env" # 🔐 Cargar credenciales
if [[ -f "$HOME/.scripts/.env.enc" ]]; then
echo "🔐 Ingresá la contraseña para descifrar tus credenciales:"
read -s passphrase
openssl enc -aes-256-cbc -d -in "$HOME/.scripts/.env.enc" -pass pass:"$passphrase" > /tmp/.env.dec
source /tmp/.env.dec
rm /tmp/.env.dec
elif [[ -f "$HOME/.scripts/.env" ]]; then
source "$HOME/.scripts/.env"
else
echo "❌ No se encontraron credenciales. Ejecutá instalar-subir.sh primero."
exit 1
fi
remote_url=$(git remote get-url origin | sed 's|https://||') remote_url=$(git remote get-url origin | sed 's|https://||')
auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url" auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url"
@ -24,7 +86,6 @@ function marco() {
if ! git diff-index --quiet HEAD; then if ! git diff-index --quiet HEAD; then
echo "📦 Se detectaron cambios sin commitear:" echo "📦 Se detectaron cambios sin commitear:"
git status -s git status -s
read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit
if [[ "$auto_commit" == "s" ]]; then if [[ "$auto_commit" == "s" ]]; then
read -p "📝 Ingresá el mensaje de commit: " mensaje read -p "📝 Ingresá el mensaje de commit: " mensaje
@ -62,34 +123,9 @@ EOF
chmod +x "$HOME/.scripts/git-subir.sh" chmod +x "$HOME/.scripts/git-subir.sh"
# 🔗 Crear alias ejecutable # 🔗 Alias global
echo "Creando alias git-subir..." echo "Creando alias git-subir..."
cat <<EOF | sudo tee /usr/local/bin/git-subir > /dev/null echo -e "#!/bin/bash\nexec \"$HOME/.scripts/git-subir.sh\" \"\$@\"" | sudo tee /usr/local/bin/git-subir > /dev/null
#!/bin/bash
exec "$HOME/.scripts/git-subir.sh" "\$@"
EOF
sudo chmod +x /usr/local/bin/git-subir sudo chmod +x /usr/local/bin/git-subir
# 🔐 Credenciales
echo "🔐 Configurando credenciales de Gitea..."
read -p "Usuario de Gitea: " GITEA_USER
read -s -p "Contraseña o Token: " GITEA_TOKEN
echo ""
echo "🔎 Verificando credenciales..."
response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" https://gitea.espaciomemoria.ar/api/v1/user)
if echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then
echo "✅ Credenciales válidas."
echo "GITEA_USER=$GITEA_USER" > "$HOME/.scripts/.env"
echo "GITEA_TOKEN=$GITEA_TOKEN" >> "$HOME/.scripts/.env"
chmod 600 "$HOME/.scripts/.env"
else
echo "❌ Credenciales inválidas. Abortando instalación."
sudo rm -f /usr/local/bin/git-subir
rm -rf "$HOME/.scripts/git-subir.sh"
exit 1
fi
echo "✅ Instalación completa. Usá el comando: git subir" echo "✅ Instalación completa. Usá el comando: git subir"