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:
- 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
Comando personalizado para subir cambios a un repositorio Gitea con autenticación automática, manejo de conflictos y commits interactivos.
---
## 📦 Instalación
## 🚀 Instalación
```bash
chmod +x 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
Desde cualquier repositorio Git:
Permite guardar credenciales cifradas o en texto plano.
bash
git subir
El script:
Crea el comando global git subir.
Detecta cambios sin commitear
Seguridad
Las credenciales pueden guardarse cifradas con openssl.
Te pregunta si querés hacer commit automático
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
Se descifran al ejecutar git subir mediante contraseña.
🧹 Desinstalación
bash
chmod +x 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
~/.scripts/git-subir.sh: script principal
Detecta conflictos y ofrece merge automático.
~/.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
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
set -e
echo "🧹 Eliminando alias git-subir..."
echo "🧹 Desinstalando git subir..."
sudo rm -f /usr/local/bin/git-subir
echo "🧹 Eliminando script principal..."
rm -f "$HOME/.scripts/git-subir.sh"
echo "🧹 Eliminando credenciales..."
rm -f "$HOME/.scripts/.env"
rm -f "$HOME/.scripts/.env.enc"
echo "✅ Desinstalación completa."

View File

@ -1,15 +1,77 @@
#!/bin/bash
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"
# 📜 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"
#!/bin/bash
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://||')
auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url"
@ -24,7 +86,6 @@ function marco() {
if ! git diff-index --quiet HEAD; then
echo "📦 Se detectaron cambios sin commitear:"
git status -s
read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit
if [[ "$auto_commit" == "s" ]]; then
read -p "📝 Ingresá el mensaje de commit: " mensaje
@ -62,34 +123,9 @@ EOF
chmod +x "$HOME/.scripts/git-subir.sh"
# 🔗 Crear alias ejecutable
# 🔗 Alias global
echo "Creando alias git-subir..."
cat <<EOF | sudo tee /usr/local/bin/git-subir > /dev/null
#!/bin/bash
exec "$HOME/.scripts/git-subir.sh" "\$@"
EOF
echo -e "#!/bin/bash\nexec \"$HOME/.scripts/git-subir.sh\" \"\$@\"" | sudo tee /usr/local/bin/git-subir > /dev/null
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"