tallermac

macOS, automatización y oficio · 208 artículos

Terminal 18 de junio de 2024 Por Francisco Sierra Cuerva 7 min de lectura

SSH desde Mac: cómo conectar a un servidor de forma segura, de cero a experto

Guía completa de SSH desde Mac para conectar a un servidor: claves ed25519, ssh-copy-id, alias en ~/.ssh/config, túneles y copia de archivos con scp y rsync.

Vibrant close-up of a computer screen displaying color-coded programming code.
Foto de Godfrey Atima en Pexels

Alquilas tu primer VPS, el proveedor te manda un correo con una IP y una contraseña, y de pronto toca «entrar». La buena noticia es que para usar SSH desde el Mac y conectar a un servidor no tienes que instalar absolutamente nada: macOS incluye un cliente OpenSSH completo desde hace décadas. La mala es que si te quedas en «IP más contraseña» estás trabajando de la forma incómoda e insegura. Esta guía te lleva de cero a un acceso con clave, alias cortos y transferencia de archivos, todo con ejemplos copiables.

El proceso resumido: generas una clave ed25519 con ssh-keygen, la instalas en el servidor con ssh-copy-id, creas un alias en ~/.ssh/config y a partir de ahí conectas escribiendo solo ssh miservidor, sin contraseña y con seguridad real.

Qué es SSH y por qué tu Mac ya lo trae instalado

SSH (Secure Shell) es el protocolo estándar para administrar máquinas remotas de forma cifrada: todo lo que tecleas y todo lo que el servidor responde viaja cifrado de extremo a extremo. macOS es un sistema Unix certificado, así que el cliente ssh de OpenSSH viene preinstalado; puedes comprobarlo con:

ssh -V

Verás algo como OpenSSH_9.x, LibreSSL x.x. Si no te manejas con fluidez en la línea de comandos, repasa antes la guía de Terminal y Homebrew; todo lo que sigue ocurre ahí dentro.

Primera conexión: ssh usuario@servidor

La forma más básica de conectar por SSH desde el Mac a un servidor:

ssh usuario@203.0.113.10

La primera vez verás un aviso sobre la huella del servidor («The authenticity of host can't be established»). No es un error: SSH te pide confirmar que confías en esa máquina, y guarda su huella en ~/.ssh/known_hosts para avisarte si algún día cambia (señal de posible suplantación). Escribe yes, introduce la contraseña y estás dentro. Si el servidor escucha en un puerto distinto del 22, añade -p 2222.

Conectar así funciona, pero escribir una contraseña en cada sesión es incómodo y, sobre todo, deja el servidor expuesto a ataques de fuerza bruta. El siguiente paso es obligatorio.

Claves ed25519: adiós a la contraseña

La autenticación por clave pública es el estándar actual: tu Mac guarda una clave privada que nunca sale de él, y el servidor guarda la pública. El algoritmo recomendado hoy es ed25519: claves cortas, rápidas y sin los problemas de diseño de RSA antiguo. Lo recomiendan tanto la documentación de SSH Academy como la propia comunidad de OpenSSH.

ssh-keygen -t ed25519 -C "fran@macbook"

Te hará dos preguntas:

  • Dónde guardar la clave: acepta la ruta por defecto, ~/.ssh/id_ed25519.
  • Passphrase: pon una, siempre. Es la contraseña que protege la clave privada si alguien roba tu Mac. No es opcional en una máquina portátil.

Se generan dos archivos: id_ed25519 (privada, jamás la compartas) e id_ed25519.pub (pública, la que va al servidor).

ssh-copy-id: instalar la clave en el servidor

Para que el servidor confíe en tu clave, su parte pública debe acabar en el archivo ~/.ssh/authorized_keys del usuario remoto. macOS incluye ssh-copy-id desde hace años, así que basta un comando (ver cómo funciona ssh-copy-id):

ssh-copy-id usuario@203.0.113.10

Te pedirá la contraseña una última vez. A partir de ahí, ssh usuario@203.0.113.10 entra directo, pidiéndote solo la passphrase de tu clave (y ni eso, si usas el agente, como verás abajo). Si ssh-copy-id no estuviera disponible, el equivalente manual es:

cat ~/.ssh/id_ed25519.pub | ssh usuario@203.0.113.10 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

~/.ssh/config: alias para no memorizar IPs

Aquí es donde SSH pasa de herramienta a comodidad. Crea el archivo ~/.ssh/config con bloques por servidor:

Host miservidor
    HostName 203.0.113.10
    User usuario
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host raspberry
    HostName 192.168.1.50
    User pi

Desde ese momento, ssh miservidor equivale a toda la línea larga. El alias también lo heredan scp, rsync y hasta el ssh:// de Git. Añade al principio un bloque general para mantener las conexiones vivas:

Host *
    ServerAliveInterval 60
    AddKeysToAgent yes
    UseKeychain yes

ServerAliveInterval evita que la sesión muera si te levantas a por café, y UseKeychain yes junto a AddKeysToAgent yes guarda la passphrase en el llavero de macOS: la introduces una vez por sesión de trabajo, no en cada conexión.

Copiar archivos: scp, sftp y rsync

Con el alias configurado, mover archivos entre tu Mac y el servidor es trivial.

scp, para copias puntuales:

scp informe.pdf miservidor:/home/usuario/
scp miservidor:/var/log/nginx/access.log ./

sftp, para una sesión interactiva de transferencia:

sftp miservidor

Dentro usas put, get, ls y cd como en un FTP clásico, pero cifrado.

rsync sobre SSH, la opción seria para sincronizar carpetas: solo transfiere lo que ha cambiado, reanuda interrupciones y muestra progreso:

rsync -avz --progress ./proyecto/ miservidor:/var/www/proyecto/

Ojo con la barra final de la ruta de origen: ./proyecto/ copia el contenido de la carpeta; sin la barra, copia la carpeta entera dentro del destino. Este mismo patrón sirve para copias de seguridad en un NAS o disco remoto; la estrategia de copias con Time Machine cubre la parte local.

Reenvío de puertos: el superpoder de SSH

El reenvío local (-L) te permite acceder a un servicio del servidor como si estuviera en tu Mac. Ejemplo clásico: una base de datos que solo escucha en el localhost del servidor, inaccesible desde fuera:

ssh -L 5433:localhost:5432 miservidor

Mientras esa sesión esté abierta, apuntar tu cliente de base de datos a localhost:5433 en tu Mac conecta con el PostgreSQL remoto, todo cifrado por el túnel. También sirve para paneles web internos (-L 8080:localhost:80), un phpMyAdmin que no quieres exponer, o el puerto de depuración de una app. Si el túnel no responde, verifica la ruta con las herramientas de diagnóstico de red del Terminal antes de culpar a SSH.

Buenas prácticas de seguridad

Una vez que entras con clave, cierra la puerta por la que entraste:

  • Desactiva el login por contraseña en el servidor: en /etc/ssh/sshd_config, PasswordAuthentication no. Con la clave instalada, la contraseña solo sirve para que la fuercen.
  • No uses root directamente: PermitRootLogin no y entra con un usuario normal que tenga sudo. Es la recomendación estándar de la documentación de OpenSSH.
  • Passphrase sí o sí en la clave privada, con el llavero de macOS para no teclearla constantemente.
  • Revisa las huellas: si SSH te avisa de que la huella del servidor ha cambiado y tú no has reinstalado nada, no conectes hasta entender por qué.
  • Cambia el puerto solo como higiene, no como defensa: reduce el ruido de bots en los logs, pero la seguridad real la da la clave ed25519.

Preguntas frecuentes

¿Cómo conecto por SSH desde un Mac a un servidor Linux? Abre Terminal y ejecuta ssh usuario@IP-del-servidor. macOS trae el cliente SSH preinstalado, no hace falta instalar nada. Para uso habitual, configura una clave ed25519 y un alias en ~/.ssh/config.

¿Dónde se guardan las claves SSH en macOS? En la carpeta oculta ~/.ssh/ de tu usuario. La privada es id_ed25519 y la pública id_ed25519.pub. Accede desde Finder con ⇧⌘G y escribiendo ~/.ssh.

¿Por qué SSH me pide la contraseña si ya instalé la clave? Lo habitual: la clave pública no quedó bien en authorized_keys, los permisos de ~/.ssh en el servidor son demasiado abiertos (deben ser 700 la carpeta y 600 el archivo), o estás usando otro usuario. Ejecuta ssh -v usuario@servidor para ver qué método de autenticación se está intentando.

¿Qué diferencia hay entre scp y rsync? scp copia archivos tal cual, sin más. rsync compara origen y destino y solo transfiere las diferencias, además de reanudar transferencias cortadas: para carpetas grandes o sincronizaciones repetidas, siempre rsync.

Con esto tienes el flujo completo: clave ed25519 protegida con passphrase y llavero, alias en ~/.ssh/config, transferencia con rsync y túneles para los servicios internos. Es la configuración que usa cualquier administrador de sistemas, y tu Mac la soporta de fábrica desde el primer arranque.

Sigue leyendo

Sobre el autor

Soy Francisco Sierra Cuerva, desarrollador de software, maquero de larga recorrida y el autor de este taller. Escribo en español sobre macOS, automatización y las apps que merecen hueco en tu equipo, siempre con datos y fuentes sobre la mesa.

También soy el autor de SideList, una lista de tareas sencilla que vive en la barra de menús del Mac. Si te gusta lo que lees aquí, es la mejor muestra de cómo entiendo el software para macOS.

Equipo recomendado

Transparencia: los enlaces de esta sección son de afiliado. En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables. A ti no te cuesta nada más y solo recomiendo lo que uso.

Comentarios (0)

Todavía no hay comentarios aprobados. Sé el primero.

Los comentarios se revisan antes de publicarse.