
Tienes un servidor en la nube y necesitas conectarte a él para desplegar, revisar logs o solucionar un problema. La forma más habitual y segura de hacerlo es SSH. Si alguna vez has ejecutado git push o scp, ya has usado SSH sin necesariamente saber cómo funciona.
Cómo funciona SSH
SSH (Secure Shell) es un protocolo que establece una conexión cifrada entre dos máquinas. Toda la comunicación está cifrada, incluyendo las contraseñas y los comandos. Hay dos formas de autenticarse: con contraseña (menos recomendable) o con un par de claves criptográficas (el método estándar en producción).

El par de claves funciona así: generas dos claves matemáticamente relacionadas. La clave privada nunca sale de tu máquina. La clave pública la copias al servidor. Cuando te conectas, el servidor te envía un reto que solo alguien con la clave privada puede firmar correctamente. El servidor verifica la firma usando la clave pública y confirma la identidad.
Generar el par de claves
# Generar par de claves ED25519 (recomendado, más moderno que RSA)
ssh-keygen -t ed25519 -C "tu@email.com"
# Preguntará dónde guardar (default: ~/.ssh/id_ed25519) y passphrase opcional
# Alternativa con RSA de 4096 bits (más compatible con sistemas viejos)
ssh-keygen -t rsa -b 4096 -C "tu@email.com"
# Ver las claves generadas
ls -la ~/.ssh/
# id_ed25519 → clave privada (permisos 600, NUNCA compartir)
# id_ed25519.pub → clave pública (puedes compartirla libremente)
La passphrase es opcional pero recomendable: es una capa extra que protege la clave privada si alguien accede a tu máquina. Si no la quieres gestionar manualmente, usa ssh-agent para mantenerla en memoria.
Copiar la clave pública al servidor
# La forma más cómoda (si tienes acceso con contraseña)
ssh-copy-id usuario@servidor.com
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor.com
# Manualmente (si ssh-copy-id no está disponible)
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor.com \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# Verificar que funciona
ssh usuario@servidor.com
Transferir archivos

# scp: copia segura (sintaxis similar a cp)
scp archivo.txt usuario@servidor.com:~/destino/
scp usuario@servidor.com:~/remoto.txt ./local/
scp -r carpeta/ usuario@servidor.com:~/destino/
# rsync: sincronización incremental (solo transfiere los cambios)
rsync -avz --progress src/ usuario@servidor.com:~/dst/
rsync -avz --delete src/ usuario@servidor.com:~/dst/ # elimina archivos que ya no existen
El archivo de configuración ~/.ssh/config
En cuanto tienes más de un servidor, escribir ssh yassin@192.168.1.100 -p 2222 -i ~/.ssh/id_prod cada vez es tedioso. El archivo ~/.ssh/config permite definir aliases:
Host prod
HostName 192.168.1.100
User yassin
IdentityFile ~/.ssh/id_ed25519
Port 22
Host dev
HostName dev.ejemplo.com
User deploy
IdentityFile ~/.ssh/id_dev
Host bastion
HostName bastion.empresa.com
User yassin
ForwardAgent yes # permite saltar a otros servidores desde aquí
# Ahora puedes usar:
ssh prod
scp archivo.txt prod:~/
rsync -avz src/ dev:~/app/
Securizar el servidor SSH
Al configurar un servidor nuevo, es buena práctica deshabilitar la autenticación por contraseña una vez que tienes las claves funcionando. En /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
Y reiniciar: systemctl restart sshd. A partir de ahí, solo quien tenga la clave privada puede acceder.
Con acceso remoto configurado y servicios corriendo en el servidor, el siguiente nivel de automatización es escribir scripts que combinen todo lo anterior: conectar al servidor, verificar el estado de los servicios, hacer backups, procesar archivos. Eso es lo que resuelve Bash scripting.