DEV Community

Cover image for 🧵 Gestión de Múltiples Cuentas de GitHub en un Solo Sistema (Ubuntu)
Lenin Mendoza
Lenin Mendoza

Posted on • Edited on

🧵 Gestión de Múltiples Cuentas de GitHub en un Solo Sistema (Ubuntu)

🚀 Objetivo

¿Te has encontrado en la situación de tener que manejar proyectos de trabajo, personales y de freelance desde la misma máquina? Este tutorial surge de una necesidad real: separar completamente los entornos de trabajo para evitar conflictos y mantener la privacidad de cada contexto.

En este tutorial aprenderás a configurar múltiples cuentas de GitHub (personal, trabajo, freelance, etc.) en un mismo sistema Ubuntu de manera organizada, segura y automatizada. Utilizaremos claves SSH específicas, configuraciones locales de Git y un script que simplificará todo el proceso.
 

💡 ¿Por qué es importante esto?

  • Privacidad: Evita que los commits de trabajo aparezcan en tu perfil personal
  • Organización: Mantén cada proyecto en su contexto correspondiente
  • Seguridad: Usa claves SSH diferentes para cada cuenta
  • Profesionalismo: No mezcles repositorios corporativos con proyectos personales
  • Flexibilidad: Cambia fácilmente entre cuentas según el proyecto  

🎯 Ideal para:

Desarrolladores que trabajan remotamente, Freelancers que manejan múltiples clientes, Empleados que también desarrollan proyectos personales Consultores que trabajan con diferentes organizaciones
Cualquier persona que necesite separar sus identidades digitales
 

📋 Lo que aprenderás:

  • Generar y configurar múltiples claves SSH
  • Configurar el archivo ~/.ssh/config para automatizar conexiones
  • Establecer configuraciones locales de Git por proyecto
  • Crear un script para cambiar automáticamente entre cuentas
  • Verificar que todo funcione correctamente

Al finalizar este tutorial, podrás trabajar de forma fluida con múltiples cuentas GitHub sin preocuparte por configuraciones manuales o mezclar contextos, te lo digo por experiencia propia 😬.

 

Comencemos:

🪖 Requisitos previos

  • Tener Git instalado (sudo apt install git)
  • Tener una cuenta o varias cuentas activas en GitHub

     

🧹 Paso 0: Limpieza y reinicio de configuración previa (opcional)

Si quieres comenzar completamente desde cero:

# Elimina configuraciones globales de Git rm ~/.gitconfig # Elimina claves SSH existentes (cuidado si tienes otras claves en uso) rm -rf ~/.ssh # Limpia credenciales en caché git credential-cache exit ⚠️ Esto borra todas las configuraciones previas de Git y SSH. Haz un respaldo si es necesario. 
Enter fullscreen mode Exit fullscreen mode

     

🔑 Paso 1: Crear claves SSH por cada cuenta

El primer paso es crear un par de claves SSH (pública y privada) para cada una de tus cuentas. Esto le permite a GitHub autenticarte de forma segura sin necesidad de
contraseñas:

# Cuenta personal ssh-keygen -t ed25519 -C "tu_correo_personal@ejemplo.com" -f ~/.ssh/id_ed25519_personal # Cuenta de trabajo ssh-keygen -t ed25519 -C "tu_correo_trabajo@empresa.com" -f ~/.ssh/id_ed25519_trabajo # Cuenta freelance (opcional) ssh-keygen -t ed25519 -C "tu_correo_freelance@otro.com" -f ~/.ssh/id_ed25519_freelance No es obligatorio agregar passphrase, pero es recomendable por seguridad. 
Enter fullscreen mode Exit fullscreen mode

     

🔧 Paso 2: Para activar el agente y agregar claves al ssh-agent

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519_personal ssh-add ~/.ssh/id_ed25519_trabajo ssh-add ~/.ssh/id_ed25519_freelance 
Enter fullscreen mode Exit fullscreen mode

     

📂 Paso 3: Configura tu archivo ~/.ssh/config

Esto permite a Git usar la clave correcta según el repo:

# Cuenta personal Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_personal # Cuenta de trabajo Host github-trabajo HostName github.com User git IdentityFile ~/.ssh/id_ed25519_trabajo # Cuenta freelance (opcional) Host github-freelance HostName github.com User git IdentityFile ~/.ssh/id_ed25519_freelance 
Enter fullscreen mode Exit fullscreen mode

     

🤝 Paso 4: Asociar claves con GitHub

Ahora, debes asociar la parte pública de cada clave con su cuenta de GitHub correspondiente.

  1. Copia tu clave pública, por ejemplo:
    cat ~/.ssh/id_ed25519_personal.pub

  2. Pégala en GitHub: Settings > SSH and GPG Keys > New SSH Key

Repite el proceso para cada cuenta.
     

🔍 Paso 5: El Script Interactivo para Gestionarlo Todo:

Guarda este código en un archivo llamado git_manager.sh en tu Escritorio o donde prefieras.

 #!/bin/bash # --- CONFIGURACIÓN DE CUENTAS DE GITHUB --- # IMPORTANTE: Edita estas variables con tus datos correctos. # Cuenta 1: Personal USER_PERSONAL="mendozalz" EMAIL_PERSONAL="mendoza124302@gmail.com" HOST_PERSONAL="github-personal" # Cuenta 2: Trabajo USER_TRABAJO="trabajo" EMAIL_TRABAJO="flavioanez@gmail.com" HOST_TRABAJO="github-trabajo" # Cuenta 3: Tati USER_TATI="tatim79" EMAIL_TATI="tatianagomez3219@gmail.com" HOST_TATI="github-tati" # --- FIN DE LA CONFIGURACIÓN --- # --- LÓGICA DEL SCRIPT --- # Colores para la salida GREEN="\033[0;32m" YELLOW="\033[0;33m" CYAN="\033[0;36m" NC="\033[0m" # No Color # Verificar si estamos dentro de un repositorio de Git if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then echo -e "${YELLOW}ERROR: No estás en un repositorio de Git.${NC}" echo "Por favor, ejecuta este script desde la carpeta raíz de tu proyecto." exit 1 fi # Función para configurar el repositorio local configurar_repositorio() { echo -e "${CYAN}--- Configurar Repositorio Local ---${NC}" echo "Selecciona la cuenta de GitHub que deseas usar para este repositorio:" echo "1) Personal ($USER_PERSONAL)" echo "2) Trabajo ($USER_TRABAJO)" echo "3) Tati ($USER_TATI)" read -p "Opción: " choice local user="" local email="" local host="" case $choice in 1) user=$USER_PERSONAL; email=$EMAIL_PERSONAL; host=$HOST_PERSONAL ;; 2) user=$USER_TRABAJO; email=$EMAIL_TRABAJO; host=$HOST_TRABAJO ;; 3) user=$USER_TATI; email=$EMAIL_TATI; host=$HOST_TATI ;; *) echo -e "${YELLOW}Opción no válida.${NC}"; return ;; esac echo -e "\nConfigurando Git localmente para ${GREEN}$user${NC}..." # 1. Configurar usuario y email localmente git config user.name "$user" git config user.email "$email" echo "Usuario y email configurados para este repositorio." # 2. Actualizar la URL del remote 'origin' para usar el Host y Usuario de SSH correctos if git remote -v | grep -q "origin"; then local current_url=$(git remote get-url origin) # Extraer solo el nombre del repositorio (ej: mi-proyecto.git) local repo_name=$(basename "$current_url") # Construir la nueva URL con el host y el usuario seleccionados local new_url="git@$host:$user/$repo_name" git remote set-url origin "$new_url" echo "URL del remote 'origin' actualizada a: ${GREEN}$new_url${NC}" else echo -e "${YELLOW}ADVERTENCIA: No se encontró un remote llamado 'origin'.${NC}" echo "Asegúrate de agregar un remote para poder hacer push/pull." fi echo -e "\n${GREEN}¡Configuración completada!${NC}" echo "Configuración local actual:" git config --local -l | grep user git remote -v } # Funciones para comandos de Git git_add() { echo -e "\n${CYAN}--- Git Add ---${NC}" git add . echo "Se han añadido todos los cambios al staging area." } git_commit() { echo -e "\n${CYAN}--- Git Commit ---${NC}" read -p "Mensaje del commit: " message git commit -m "$message" } git_push() { echo -e "\n${CYAN}--- Git Push ---${NC}" git push } git_pull() { echo -e "\n${CYAN}--- Git Pull ---${NC}" git pull } git_status() { echo -e "\n${CYAN}--- Git Status ---${NC}" git status } # Menú principal while true; do echo -e "\n${CYAN}===== GESTOR DE CUENTAS GIT =====${NC}" echo "Repositorio actual: $(basename "$(pwd)")" echo "Usuario Git local: ${GREEN}$(git config user.name || echo "No configurado")${NC}" echo "Email Git local: ${GREEN}$(git config user.email || echo "No configurado")${NC}" echo -e "${CYAN}-----------------------------------${NC}" echo "Elige una opción:" echo "1) ${YELLOW}Configurar Repositorio${NC} (¡Primer paso obligatorio!)" echo "2) Git Add ." echo "3) Git Commit" echo "4) Git Push" echo "5) Git Pull" echo "6) Git Status" echo "7) Salir" read -p "Opción: " main_choice case $main_choice in 1) configurar_repositorio ;; 2) git_add ;; 3) git_commit ;; 4) git_push ;; 5) git_pull ;; 6) git_status ;; 7) echo "Saliendo..."; exit 0 ;; *) echo -e "${YELLOW}Opción no válida.${NC}" ;; esac done 
Enter fullscreen mode Exit fullscreen mode

     

📃 Paso 6: Cómo Usar el Script.

  1. Dale permisos de ejecución (solo necesitas hacerlo una vez):
    chmod +x /ruta/a/tu/git_manager.sh

  2. Navega a tu repositorio en la terminal:
    cd /ruta/a/mi-proyecto

  3. Ejecuta el script:
    /ruta/a/tu/git_manager.sh

  4. Usa el menú:

    • La primera vez en un repo, elige la Opción 1 para seleccionar qué cuenta (Personal, Trabajo o Tati) quieres usar. El script ajustará el user.name, user.email y la URL remota automáticamente.
    • Una vez configurado, puedes usar las demás opciones (add, commit, push, pull, status) directamente desde el menú.

     

🌍 Paso 7: El Método Manual (Alternativa)

Si prefieres no usar un script, siempre puedes configurar un repositorio manualmente.

# 1. Sitúate en tu proyecto cd /ruta/a/mi-proyecto # 2. Configura el usuario y email para ESTE proyecto git config user.name "Tu Nombre de Usuario de Trabajo" git config user.email "tu_correo_de_trabajo@empresa.com" # 3. Cambia la URL remota para que use el Host correcto de tu .ssh/config # La sintaxis es: git@<HOST_DEL_SSH_CONFIG>:<usuario_github>/<repo>.git git remote set-url origin git@github-trabajo:usuario_trabajo/proyecto-cliente.git # 4. Verifica que todo esté correcto git remote -v git config user.name 
Enter fullscreen mode Exit fullscreen mode

     

🧪 Ejemplo real de error y solución

Si ves este error:

ERROR: Repository not found. fatal: No se pudo leer del repositorio remoto. 
Enter fullscreen mode Exit fullscreen mode

Pero al ejecutar:
ssh -T git@github-freelance

Obtienes:
Hi Freelance! You've successfully authenticated, but GitHub does not provide shell access.

Entonces el problema no es de autenticación, sino que:

✅ El error está en el nombre del repositorio mal especificado en el remote.

Por ejemplo, si configuraste esto incorrectamente:
git remote set-url origin git@github-freelance:Freelance/repositorio.git

Y el nombre real del repo es finanzas-2025, debes corregirlo así:
git remote set-url origin git@github-freelance:Freelance/finanzas-2025.git

Luego verifica con:

git remote -v git push 
Enter fullscreen mode Exit fullscreen mode

     

📄 Tips adicionales

  • Usa git config --global --unset user.name y --unset user.email para limpiar la configuración global.
  • Puedes usar gh (GitHub CLI) si quieres automatizar la creación de repos desde la terminal.
  • Evita usar tokens personales si trabajas con varias cuentas; el sistema SSH es más seguro y escalable.

     

📝 Créditos y utilidad

Este material fue diseñado como base para un tutorial en Dev.to o LinkedIn que facilite el trabajo colaborativo en entornos con múltiples identidades.

Ideal para:

  • Freelancers
  • Desarrolladores con proyectos open source y clientes
  • Empresas que gestionan identidades separadas para sus equipos      

🚀 Licencia

Este proyecto es libre de usar. Puedes compartirlo, clonarlo o modificarlo sin restricciones.

Conclusión:

Con esta configuración, puedes trabajar en múltiples proyectos con diferentes identidades de GitHub sin conflictos. El script interactivo simplifica enormemente el
proceso, permitiéndote cambiar de contexto con un solo comando y asegurando que cada commit y push se atribuya a la cuenta correcta.

✉️ Si te fue útil, considera compartirlo para que otros lo encuentren también.

Top comments (0)