🚀 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.
🔑 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.
🔧 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
📂 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
🤝 Paso 4: Asociar claves con GitHub
Ahora, debes asociar la parte pública de cada clave con su cuenta de GitHub correspondiente.
Copia tu clave pública, por ejemplo:
cat ~/.ssh/id_ed25519_personal.pub
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
📃 Paso 6: Cómo Usar el Script.
Dale permisos de ejecución (solo necesitas hacerlo una vez):
chmod +x /ruta/a/tu/git_manager.sh
Navega a tu repositorio en la terminal:
cd /ruta/a/mi-proyecto
Ejecuta el script:
/ruta/a/tu/git_manager.sh
-
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
🧪 Ejemplo real de error y solución
Si ves este error:
ERROR: Repository not found.
fatal: No se pudo leer del repositorio remoto.
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
📄 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.