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

Lenin Mendoza @mendozalz

About: Desarrollador Web en Wordpress desde el 2017 con experiencia en Astro, React, NextJs y Reflex (Python)

Location:
Colombia
Joined:
Apr 9, 2021

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

Publish Date: Jun 25
0 0

🚀 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.

Comments 0 total

    Add comment