Juan Diego Andrés PRADA··RAMÍREZ Entrar
Lección 6 de 7

Productividad: ssh, git CLI, tmux, alias y dotfiles

¿Qué es?

Esta lección reúne las herramientas que convierten la terminal en tu centro de operaciones diario. SSH te conecta a máquinas remotas como si estuvieras frente a ellas; la CLI de Git versiona tu trabajo desde la línea de comandos; tmux te deja tener varias sesiones a la vez y mantenerlas vivas aunque cierres la ventana; y los alias y dotfiles personalizan tu entorno para que te acompañe a cualquier ordenador. Son piezas distintas con un mismo objetivo: que trabajes más rápido y con tu propia configuración.

¿Cómo funciona?

SSH usa un par de claves (una pública que repartes y una privada que jamás compartes) para entrar a un servidor sin contraseña. Git registra tus cambios con un ciclo de status, add, commit y push. tmux trabaja con un prefijo (Ctrl+B y luego una tecla) para dividir paneles y hacer «detach» dejando procesos corriendo. Los alias son atajos para comandos largos que guardas en tus dotfiles (~/.zshrc o ~/.bashrc), archivos de configuración ocultos que recargas con source y que conviene versionar con Git.

¿Para qué sirve?

Estas herramientas hacen que tu proyecto final «Tu kit de automatización personal» viva contigo: al versionar tus dotfiles, estrenas una máquina, clonas el repositorio y recuperas de golpe todos tus alias, funciones y scripts. Los alias materializan la mentalidad del kit (detectar lo repetitivo y borrarlo), mientras SSH y tmux te permiten ejecutar tus automatizaciones en servidores remotos sin perderlas si se cae la conexión. Es el paso que lleva tu kit de una sola máquina a cualquier parte.

Ya sabes moverte, manipular texto, entender permisos y escribir scripts. Esta lección reúne las herramientas que convierten la terminal en tu centro de operaciones: trabajar en máquinas remotas, versionar con Git, manejar varias sesiones a la vez y, sobre todo, personalizar tu entorno para que el kit de automatización viva contigo en cualquier máquina. Al final hay equivalencias para quien venga de PowerShell en Windows.

SSH: tu terminal en otra máquina

ssh te conecta a un servidor remoto y te da un shell allí, como si estuvieras sentado frente a él.

ssh ana@192.168.1.50 # conectar como usuario ana
ssh ana@miservidor.com -p 2222 # puerto distinto del 22 por defecto

Teclear la contraseña cada vez es lento e inseguro. Mejor usar claves:

# 1. Generar un par de claves (privada + pública)
ssh-keygen -t ed25519 -C "ana@correo.com"

# 2. Copiar la pública al servidor (en Linux existe el ayudante):
ssh-copy-id ana@miservidor.com
# En macOS, si no tienes ssh-copy-id:
# cat ~/.ssh/id_ed25519.pub | ssh ana@miservidor.com 'cat >> ~/.ssh/authorized_keys'

# 3. A partir de ahora entras sin contraseña
ssh ana@miservidor.com

La clave privada (~/.ssh/id_ed25519, sin .pub) no se comparte jamás. Debe tener permisos 600. Solo se reparte la clave pública (.pub).

Para no repetir host, usuario y puerto, define alias en ~/.ssh/config:

# ~/.ssh/config
Host servidor
 HostName miservidor.com
 User ana
 Port 2222

Después basta ssh servidor. Y para copiar archivos por SSH: scp archivo.txt servidor:/ruta/.

Git desde la terminal

La interfaz gráfica esconde lo que pasa; la CLI te lo enseña. Ciclo básico:

git status # ¿qué cambió?
git add archivo.txt # preparar un cambio
git add . # preparar todo lo modificado
git commit -m "Añade X" # registrar el cambio con un mensaje
git log --oneline # historial compacto
git diff # ver qué cambió antes de hacer add

git branch nueva-funcion # crear rama
git switch nueva-funcion # cambiar a ella (o: git checkout)
git merge nueva-funcion # fusionarla en la rama actual

git pull # traer cambios del remoto
git push # subir tus commits

git log --oneline --graph --all te dibuja el árbol de ramas en texto. Combínalo con un alias (más abajo) y lo tendrás en un teclazo.

tmux: varias sesiones en una ventana

tmux (terminal multiplexer) te permite dividir la pantalla en paneles, tener varias ventanas y —lo mejor— dejar sesiones corriendo aunque cierres la terminal o se caiga el SSH.

tmux # iniciar una sesión
tmux new -s trabajo # sesión con nombre
tmux ls # listar sesiones
tmux attach -t trabajo # re-engancharte a una sesión

Dentro de tmux todo se hace con un prefijo: Ctrl + B y luego una tecla.

Ctrl+B " # dividir en dos paneles (horizontal)
Ctrl+B % # dividir en dos paneles (vertical)
Ctrl+B flechas # moverte entre paneles
Ctrl+B c # nueva ventana
Ctrl+B n # siguiente ventana
Ctrl+B d # "detach": salir dejando la sesión viva

El caso de uso estrella: te conectas por SSH, abres tmux, lanzas un proceso largo, haces Ctrl+B d y cierras el portátil. Mañana ssh + tmux attach y todo sigue ahí.

Alias y dotfiles: tu entorno te acompaña

Un alias es un atajo para un comando largo. Los dotfiles son los archivos de configuración ocultos (empiezan por .) donde guardas esos alias y tus ajustes: ~/.zshrc en macOS (Zsh) y ~/.bashrc en Linux (Bash).

# Añade esto a ~/.zshrc (macOS) o ~/.bashrc (Linux):
alias ll='ls -lah'
alias gs='git status'
alias gl='git log --oneline --graph --all'
alias ..='cd ..'
alias kit='cd ~/kit-automatizacion' # ir directo a tu proyecto

# También puedes meter funciones:
mkcd() { mkdir -p "$1" && cd "$1"; } # crear carpeta y entrar

Tras editar el archivo, recárgalo sin reabrir la terminal:

source ~/.zshrc # macOS
source ~/.bashrc # Linux

Versiona tus dotfiles con Git en un repositorio. Así, al estrenar máquina, clonas el repo y recuperas todos tus alias, funciones y el kit de automatización de una vez. Es la forma profesional de "llevarte tu terminal" a cualquier parte.

Ejemplo guiado: un alias que ahorra escritura real

# 1. Mira cuánto escribes hoy para ver el estado de Git
git status

# 2. Abre tu archivo de configuración (usa el editor que prefieras)
nano ~/.zshrc # o ~/.bashrc en Linux

# 3. Añade al final:
alias gs='git status'
alias gaa='git add .'
alias gc='git commit -m'

# 4. Guarda (en nano: Ctrl+O, Enter, Ctrl+X) y recarga
source ~/.zshrc

# 5. Pruébalo
gs # equivale a git status
gc "Mi primer commit con alias" # git commit -m "..."

Tres letras en vez de doce, cada vez, todo el día. Multiplica eso por meses: esa es la mentalidad del kit de automatización: detectar lo repetitivo y borrarlo.

Equivalencias en PowerShell (Windows)

Si alternas con Windows, muchos conceptos se trasladan, aunque los nombres cambian:

Bash/Zsh PowerShell
-------- ----------
ls Get-ChildItem (alias: ls, dir)
cp Copy-Item (alias: cp)
mv Move-Item (alias: mv)
rm Remove-Item (alias: rm)
cat Get-Content (alias: cat)
grep "x" Select-String "x"
pwd Get-Location (alias: pwd)
export VAR=valor $env:VAR = "valor"
~/.bashrc $PROFILE (tu archivo de perfil de PowerShell)
alias x='...' Set-Alias / función en $PROFILE

PowerShell trabaja con objetos, no con texto plano: Get-Process | Where-Object CPU -gt 10 filtra por una propiedad real, no por una cadena. Es un modelo distinto, pero la intuición de "encadenar con tuberías" es la misma. SSH y Git CLI funcionan igual en Windows.

Tech English: remote (remoto), key pair (par de claves), public/private key (clave pública/privada), branch (rama), commit (confirmación de cambios), merge (fusión), session (sesión), attach/detach (enganchar/soltar), alias (atajo), dotfiles (archivos de configuración).

Ejercicios

  1. Diseña tu set de alias. Revisa mentalmente (o con history | sort | uniq -c | sort -rn) los comandos que más repites. Propón cinco alias o funciones que reducirían tu escritura, explicando para cada uno qué problema resuelve. Justifica por qué conviene guardarlos en un repositorio de dotfiles en lugar de solo en la máquina actual.

  2. Planifica una sesión remota resiliente. Debes ejecutar en un servidor un proceso que tarda dos horas, pero tu conexión se cae a ratos. Describe paso a paso, con los comandos exactos, cómo usarías ssh (con clave, no contraseña) y tmux para que el proceso sobreviva a las desconexiones y puedas volver a verlo más tarde desde otra máquina. Explica por qué tmux es necesario aquí y qué pasaría sin él.

Tu progreso se guarda en este navegador. Inicia sesión para guardarlo en tu cuenta y verlo desde cualquier dispositivo.