macOS Tahoe 26.3 Rompió SSH: Cambios de Sensibilidad a Mayúsculas, Eliminación de Claves DSA y Guía Completa de Solución

macOSTahoe ·
macOS Tahoe 26.3 Rompió SSH: Cambios de Sensibilidad a Mayúsculas, Eliminación de Claves DSA y Guía Completa de Solución

macOS Tahoe 26.3 cambió silenciosamente el manejo de nombres de usuario SSH a sensible a mayúsculas y deshabilitó las claves ssh-dss. Guía completa para reparar conexiones SSH, actualizar configuraciones y migrar a claves Ed25519.

Apple lanzó macOS Tahoe 26.3 el 11 de febrero de 2026 y, para miles de desarrolladores y administradores de sistemas, las conexiones SSH se rompieron de inmediato. Sin diálogo de advertencia. Sin asistente de migración. Sin nota de versión que lo señalara. Un día podía usar ssh administrator@yourserver y al día siguiente recibía Connection closed by 10.10.83.28 port 22. Si dependía de claves DSA para autenticarse contra infraestructura heredada, estas dejaron de funcionar por completo. Esta guía explica exactamente qué cambió, por qué sucedió y cómo reparar cada flujo de trabajo afectado, desde sesiones interactivas hasta pipelines de CI/CD automatizados.

Puntos Clave

  • macOS Tahoe 26.3 aplica nombres de usuario SSH sensibles a mayúsculas. Escribir administrator en lugar de Administrator resulta en un cierre de conexión inmediato sin solicitud de contraseña.
  • Las claves ssh-dss (DSA) han sido eliminadas permanentemente. OpenSSH 10.0, incluido con Tahoe 26.3, eliminó el soporte DSA completamente desde la compilación. No hay opción de configuración para volver a habilitarlo.
  • Ahora aparecen advertencias de intercambio de claves post-cuántico al conectarse a servidores que no admiten mlkem768x25519-sha256 o sntrup761x25519-sha512.
  • Ed25519 es el tipo de clave recomendado para todas las claves SSH nuevas. Es más rápido, más seguro y produce firmas más pequeñas que RSA.
  • Se debe auditar cada archivo ~/.ssh/config para detectar discrepancias de mayúsculas en las directivas User y cualquier referencia a ssh-dss en HostKeyAlgorithms o PubkeyAcceptedAlgorithms.

Tabla de Contenidos

  1. Qué Cambió Exactamente en SSH de macOS Tahoe 26.3
  2. Diagnóstico de Fallas de Conexión SSH Después de la Actualización
  3. Entendiendo el Cambio de Sensibilidad a Mayúsculas
  4. Entendiendo la Eliminación de Claves DSA
  5. Advertencias de Intercambio de Claves Post-Cuántico
  6. Solución Paso a Paso: Problemas de Sensibilidad a Mayúsculas
  7. Solución Paso a Paso: Migración de DSA a Ed25519
  8. Guía Completa de Auditoría de Configuración SSH
  9. Cambios en el Agente SSH e Integración con Keychain
  10. Impacto en Pipelines CI/CD y Automatización
  11. Impacto en Flujos de Trabajo de Desarrollo Remoto
  12. Soluciones Alternativas para Infraestructura Heredada
  13. Mejores Prácticas de Seguridad SSH para 2026
  14. Preguntas Frecuentes
  15. Conclusión

Qué Cambió Exactamente en SSH de macOS Tahoe 26.3

macOS Tahoe 26.3 incluye OpenSSH 10.0, que introduce tres cambios que rompen los flujos de trabajo SSH diarios. Apple no destacó ninguno de estos en las notas de versión orientadas al usuario, dejando a los desarrolladores descubrirlos a través de conexiones fallidas.

Cambio 1: Coincidencia de Nombres de Usuario Sensible a Mayúsculas

Antes de Tahoe 26.3, el cliente SSH en macOS era permisivo con las mayúsculas de los nombres de usuario. Podía conectarse con ssh administrator@server, ssh Administrator@server o incluso ssh ADMINISTRATOR@server, y el servidor remoto resolvería correctamente el nombre de usuario siempre que el sistema operativo subyacente pudiera encontrar la cuenta. Después de la actualización, el cliente SSH aplica una coincidencia estricta de mayúsculas antes de que la conexión se establezca por completo. Si las mayúsculas no coinciden con lo que espera el servidor remoto, la conexión se cierra inmediatamente, antes de que se complete la autenticación por contraseña o el intercambio de claves.

Cambio 2: Eliminación Completa de DSA (ssh-dss)

OpenSSH ha estado deprecando DSA desde la versión 7.0 en 2015. La deprecación siguió una línea de tiempo clara:

FechaVersión OpenSSHEstado DSA
20157.0Deshabilitado por defecto, rehabilitable vía config
20249.xOpcional en tiempo de compilación, habilitado por defecto
Mediados de 20249.xOpcional en tiempo de compilación, deshabilitado por defecto
Abril 202510.0Eliminado completamente del código fuente
Febrero 202610.0 (macOS Tahoe 26.3)Enviado a todos los usuarios de macOS

Con macOS Tahoe 26.3, no existe la solución alternativa PubkeyAcceptedAlgorithms +ssh-dss. El algoritmo no está presente en el binario. Cualquier configuración SSH que haga referencia a ssh-dss producirá un error Bad key types.

Cambio 3: Advertencias de Intercambio de Claves Post-Cuántico

OpenSSH 10.0 introdujo una advertencia que se activa al conectarse a servidores que no admiten algoritmos de intercambio de claves post-cuántico. La advertencia dice:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

Si bien se trata de una advertencia y no de un fallo definitivo, crea ruido en la salida del terminal y puede romper scripts automatizados que analizan la salida SSH.

Qué No Cambió

Vale la pena señalar lo que sigue igual:

  • Las claves RSA continúan funcionando (con algoritmos de firma rsa-sha2-256 y rsa-sha2-512)
  • Las claves ECDSA continúan funcionando (aunque Ed25519 es la preferida)
  • El reenvío de puertos SSH, los túneles y ProxyJump funcionan de manera idéntica
  • El formato del archivo ~/.ssh/known_hosts no ha cambiado

Si es nuevo en SSH en macOS o está configurando un entorno de desarrollo desde cero, nuestra guía de configuración de desarrollador de macOS Tahoe cubre la configuración inicial completa.


Diagnóstico de Fallas de Conexión SSH Después de la Actualización

Antes de realizar cualquier cambio, debe determinar cuál de los tres problemas está afectando sus conexiones. La salida detallada de SSH es su principal herramienta de diagnóstico.

Paso 1: Habilitar Salida SSH Detallada

Ejecute su comando SSH fallido con indicadores de triple verbosidad para ver la negociación completa del protocolo de enlace:

ssh -vvv user@hostname

Esto produce una salida detallada que muestra cada etapa de la conexión. Busque estos patrones específicos:

Patrón de falla por sensibilidad a mayúsculas:

debug1: Connecting to 10.10.83.28 [10.10.83.28] port 22.
debug1: Connection established.
debug1: identity file /Users/you/.ssh/id_ed25519 type 3
debug3: receive packet: type 7
Connection closed by 10.10.83.28 port 22

El indicador clave es que la conexión se cierra después de establecerse pero antes de cualquier intento de autenticación. No hay mensaje de "Permission denied": la conexión simplemente se cae.

Patrón de falla de clave DSA:

/Users/you/.ssh/config line 15: Bad key types '+ssh-dss'.

o:

Bad key types '+ssh-rsa,ssh-dss'

Este error aparece inmediatamente cuando el cliente SSH analiza su archivo de configuración, antes de cualquier intento de conexión.

Patrón de advertencia post-cuántico:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

Esto aparece durante el intercambio de claves pero no impide que la conexión se complete.

Paso 2: Verificar la Versión del Cliente SSH

Verifique qué versión de OpenSSH se está ejecutando:

ssh -V

Salida esperada en macOS Tahoe 26.3:

OpenSSH_10.0p1, LibreSSL 3.3.6

Si ve una versión más antigua, puede tener un OpenSSH instalado por Homebrew con mayor prioridad. Verifique qué binario se está utilizando:

which ssh

El SSH del sistema está en /usr/bin/ssh. Si ve /opt/homebrew/bin/ssh o /usr/local/bin/ssh, está usando una versión de Homebrew que puede comportarse de manera diferente.

Paso 3: Probar con Parámetros Explícitos

Aísle el problema probando con mayúsculas de nombre de usuario y tipo de clave explícitos:

# Probar sensibilidad a mayúsculas - intentar ambas variantes
ssh -vvv Administrator@hostname
ssh -vvv administrator@hostname

# Probar sin interferencia del archivo de configuración
ssh -F /dev/null -vvv user@hostname

# Probar con una clave específica
ssh -vvv -i ~/.ssh/id_ed25519 user@hostname

Salida de Depuración SSH en Terminal

Paso 4: Revisar la Configuración SSH en Busca de Errores

Analice su archivo de configuración para identificar líneas que hagan referencia a algoritmos obsoletos:

# Verificar cualquier referencia ssh-dss
grep -n "ssh-dss" ~/.ssh/config

# Verificar referencias ssh-dss en la configuración del sistema
grep -n "ssh-dss" /etc/ssh/ssh_config

# Verificar todas las directivas User para revisar mayúsculas
grep -n "User " ~/.ssh/config

Para una comprensión más profunda del uso de Terminal en macOS Tahoe, consulte nuestra guía de Terminal de macOS Tahoe.


Entendiendo el Cambio de Sensibilidad a Mayúsculas

Por Qué Este Cambio Rompe las Conexiones

En la mayoría de los sistemas similares a Unix, los nombres de usuario son sensibles a mayúsculas a nivel del sistema operativo. Un usuario llamado Administrator es técnicamente una cuenta diferente de administrator. Sin embargo, el protocolo SSH mismo (RFC 4252) establece que los nombres de usuario son "sensibles a mayúsculas" pero reconoce que las implementaciones de servidor pueden elegir manejar esto de manera diferente.

Antes de macOS Tahoe 26.3, el cliente SSH de macOS era permisivo. Cuando escribía ssh administrator@server, el cliente enviaba el nombre de usuario tal cual, y muchos servidores SSH (particularmente los que se ejecutan en Windows, macOS o dispositivos de red) normalizaban las mayúsculas durante la autenticación. La conexión tenía éxito porque el servidor hacía el trabajo de hacer coincidir administrator con la cuenta Administrator.

Con OpenSSH 10.0, el cliente SSH en macOS ahora realiza una verificación previa a la autenticación más estricta. Si el servidor devuelve un mensaje de protocolo temprano que indica una discrepancia de mayúsculas, la conexión se termina antes de que proceda la autenticación. Esto significa:

  • Las conexiones a servidores Windows (que históricamente normalizaban las mayúsculas) pueden romperse
  • Las conexiones a dispositivos de red (enrutadores, switches, dispositivos NAS) que usan nombres de usuario sin distinción de mayúsculas pueden romperse
  • Las conexiones a servidores macOS donde la cuenta de administrador es Administrator (A mayúscula) pero los scripts usan administrator (a minúscula) se romperán
  • Las conexiones a servidores Linux tienen menos probabilidades de verse afectadas ya que los nombres de usuario de Linux ya son sensibles a mayúsculas

Escenarios Comunes que Se Rompen

Escenario 1: Gestión Remota de macOS a macOS

Muchos administradores de sistemas se conectan a Macs remotas usando:

ssh [email protected]

Pero la cuenta de administrador predeterminada de macOS se crea como Administrator con A mayúscula. Esto funcionaba antes de Tahoe 26.3 y falla después.

Escenario 2: Gestión de Dispositivos de Red

Conectarse a enrutadores, switches, firewalls y dispositivos NAS a menudo usa nombres de usuario genéricos:

ssh [email protected]
ssh [email protected]

Si el dispositivo almacena el nombre de usuario como Admin o ROOT, estas conexiones ahora fallarán silenciosamente.

Escenario 3: Alias de Configuración SSH

Muchos desarrolladores tienen entradas de configuración SSH con mayúsculas incorrectas que anteriormente funcionaban:

# ~/.ssh/config - esto puede romperse ahora
Host production
    HostName prod.example.com
    User deploy      # El servidor espera "Deploy"
    IdentityFile ~/.ssh/prod_key

Entendiendo la Eliminación de Claves DSA

El Argumento de Seguridad Contra DSA

DSA (Algoritmo de Firma Digital) tal como se implementa en SSH usa una longitud de clave fija de 1024 bits y SHA-1 para el hashing. Esta combinación proporciona aproximadamente 80 bits de seguridad simétrica, muy por debajo del mínimo de 128 bits recomendado por los estándares de seguridad modernos.

Las debilidades específicas de las claves DSA:

PropiedadDSA (ssh-dss)Ed25519RSA-4096
Tamaño de clave1024 bits256 bits4096 bits
Algoritmo hashSHA-1SHA-512SHA-256/512
Nivel de seguridad~80 bits~128 bits~128 bits
Tamaño de firma40 bytes64 bytes512 bytes
Velocidad de firmaLentaRápidaModerada
Velocidad de verificaciónLentaRápidaModerada
Vulnerabilidad a sesgosAltaNingunaNinguna

DSA es particularmente vulnerable a fallas de implementación. Si el generador de números aleatorios utilizado durante la firma tiene algún sesgo, la clave privada puede recuperarse a partir de un pequeño número de firmas. Esto ha sido explotado en ataques del mundo real.

Qué Significa "Eliminado" Realmente

En versiones anteriores de macOS, DSA estaba deshabilitado por defecto pero podía rehabilitarse con opciones de configuración:

# Esto funcionaba en macOS Sequoia y versiones anteriores
Host legacy-server
    HostKeyAlgorithms +ssh-dss
    PubkeyAcceptedAlgorithms +ssh-dss

En macOS Tahoe 26.3, estas líneas de configuración en sí mismas causan errores porque el binario SSH ya no reconoce ssh-dss como un identificador de algoritmo válido. El error es:

/Users/you/.ssh/config line 8: Bad key types '+ssh-dss'.

Esto significa:

  1. No puede usar claves DSA para la autenticación (inicio de sesión con clave pública)
  2. No puede aceptar claves de host DSA de servidores
  3. No puede ni siquiera hacer referencia a ssh-dss en sus archivos de configuración sin causar errores
  4. La herramienta ssh-keygen ya no puede generar claves DSA

Verificar si Tiene Claves DSA

Antes de proceder con la migración, verifique sus claves existentes:

# Listar todas las claves SSH con sus tipos
for key in ~/.ssh/*.pub; do
    echo "=== $key ==="
    ssh-keygen -l -f "$key"
done

Ejemplo de salida:

=== /Users/you/.ssh/id_dsa.pub ===
1024 SHA256:abc123... you@mac (DSA)          # Esta clave debe reemplazarse
=== /Users/you/.ssh/id_ed25519.pub ===
256 SHA256:xyz789... you@mac (ED25519)       # Esta clave está bien
=== /Users/you/.ssh/id_rsa.pub ===
3072 SHA256:def456... you@mac (RSA)          # Esta clave está bien

Cualquier clave identificada como (DSA) debe reemplazarse. Si encuentra una, no la elimine todavía: la necesita para identificar qué servidores la tienen autorizada.


Advertencias de Intercambio de Claves Post-Cuántico

Qué Significa la Advertencia

OpenSSH 10.0 introdujo el intercambio de claves post-cuántico usando el algoritmo ML-KEM (anteriormente CRYSTALS-Kyber) hibridizado con X25519. El algoritmo de intercambio de claves predeterminado ahora es mlkem768x25519-sha256, con sntrup761x25519-sha512 como respaldo.

Al conectarse a un servidor que no admite ninguno de estos algoritmos, OpenSSH muestra:

WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.

Un ataque de "almacenar ahora, descifrar después" significa que un adversario podría registrar su tráfico SSH cifrado hoy y descifrarlo en el futuro cuando las computadoras cuánticas sean capaces de romper los algoritmos clásicos de intercambio de claves.

Cuándo Verá Esta Advertencia

  • Al conectarse a servidores que ejecutan OpenSSH 8.x o anterior
  • Al conectarse a dispositivos de red con implementaciones SSH integradas
  • Al conectarse a instancias en la nube con versiones más antiguas del daemon SSH
  • Al conectarse a GitHub, GitLab o Bitbucket (puede o no admitir algoritmos PQ todavía)

Silenciar la Advertencia

Si comprende el riesgo y desea suprimir la advertencia, agregue esto a su ~/.ssh/config:

# Suprimir advertencias post-cuánticas globalmente
Host *
    WarnWeakCrypto no

O solo para hosts específicos:

Host legacy-server
    HostName 192.168.1.100
    WarnWeakCrypto no

La solución ideal es actualizar sus servidores a OpenSSH 9.0 o posterior, que admite sntrup761x25519-sha512, u OpenSSH 9.9+, que admite el más nuevo mlkem768x25519-sha256.


Solución Paso a Paso: Problemas de Sensibilidad a Mayúsculas

Solución 1: Determinar las Mayúsculas Correctas del Nombre de Usuario

Primero, verifique el nombre de usuario exacto en el sistema remoto. El método depende del sistema operativo remoto:

Para servidores remotos Linux/macOS:

# Si aún puede iniciar sesión a través de consola, acceso físico u otro cliente SSH
grep "your_username" /etc/passwd

# O usar el comando id
id

# Ejemplo de salida: uid=501(Administrator) gid=20(staff) groups=...

Para servidores Windows remotos (OpenSSH):

# En PowerShell en la máquina remota
whoami
# Salida: DOMAIN\Administrator

Para dispositivos de red:

Consulte la interfaz de gestión web del dispositivo o la documentación para conocer el formato exacto del nombre de usuario. Patrones comunes:

  • Cisco IOS: generalmente minúsculas (admin)
  • Juniper: generalmente minúsculas (root)
  • Synology NAS: sensible a mayúsculas según se creó
  • QNAP NAS: sensible a mayúsculas según se creó

Solución 2: Actualizar su Archivo de Configuración SSH

Abra su configuración SSH y corrija todas las directivas User:

# Abrir el archivo de configuración
nano ~/.ssh/config

Antes (roto):

Host production
    HostName prod.example.com
    User administrator
    IdentityFile ~/.ssh/prod_key

Host nas
    HostName nas.local
    User admin
    Port 22

Después (corregido):

Host production
    HostName prod.example.com
    User Administrator
    IdentityFile ~/.ssh/prod_key

Host nas
    HostName nas.local
    User Admin
    Port 22

Solución 3: Actualizar Alias de Shell y Scripts

Busque comandos SSH en su configuración de shell:

# Verificar alias de bash
grep -n "ssh " ~/.bashrc ~/.bash_profile 2>/dev/null

# Verificar alias de zsh
grep -n "ssh " ~/.zshrc ~/.zprofile 2>/dev/null

# Verificar comandos SSH en scripts personalizados
grep -rn "ssh " ~/scripts/ ~/bin/ 2>/dev/null

Actualice cualquier nombre de usuario codificado para usar las mayúsculas correctas.

Solución 4: Actualizar Variables de Entorno

Algunas herramientas usan variables de entorno para los nombres de usuario SSH:

# Verificar variables de entorno relacionadas con SSH
env | grep -i ssh
env | grep -i user

# Variables comunes a verificar
echo $DEPLOY_USER
echo $SSH_USER
echo $REMOTE_USER

Solución 5: Verificar la Solución

Después de realizar cambios, verifique cada conexión:

# Probar con salida detallada
ssh -v production

# Esperado: autenticación exitosa
# debug1: Authentication succeeded (publickey).

Solución Paso a Paso: Migración de DSA a Ed25519

Esta sección describe el proceso completo de reemplazo de claves DSA con claves Ed25519. Si necesita información básica sobre comandos de Terminal, nuestra guía de dominio del Terminal Mac cubre todos los fundamentos.

Flujo de Migración de Claves SSH

Fase 1: Inventariar sus Claves DSA

Antes de generar nuevas claves, documente dónde se usan sus claves DSA:

# Paso 1: Encontrar todas las claves DSA en su sistema
find ~/.ssh -name "*.pub" -exec grep -l "ssh-dss" {} \;

# Paso 2: Para cada clave DSA, verificar qué servidores la autorizan
# Anotar la huella digital de la clave pública
ssh-keygen -l -f ~/.ssh/id_dsa.pub

# Paso 3: Verificar claves de host DSA en known_hosts
grep "ssh-dss" ~/.ssh/known_hosts | awk '{print $1}'

Crear una lista de verificación de migración:

# Crear un archivo de seguimiento de migración
cat > ~/ssh_migration_checklist.txt << 'EOF'
Lista de Verificación de Migración de Clave DSA SSH
===============================
Fecha: $(date)

Claves DSA Encontradas:
- [ ] ~/.ssh/id_dsa -> Usada para: _______________
- [ ] ~/.ssh/id_dsa.pub -> Autorizada en: _______________

Servidores con Claves de Host DSA:
- [ ] server1.example.com
- [ ] 192.168.1.100

Automatización/Scripts que Usan DSA:
- [ ] deploy.sh
- [ ] backup-cron.sh
- [ ] Pipeline CI/CD: _______________
EOF

Fase 2: Generar Nuevas Claves Ed25519

Genere un nuevo par de claves Ed25519 con un comentario significativo:

# Generar clave Ed25519 con comentario descriptivo
ssh-keygen -t ed25519 -C "yourname@macbook-2026-02" -f ~/.ssh/id_ed25519

# Se le pedirá una frase de contraseña - USE UNA
# Una frase de contraseña protege su clave privada si su máquina se ve comprometida

Si necesita claves separadas para diferentes propósitos (recomendado para aislamiento de seguridad):

# Clave para servidores de trabajo
ssh-keygen -t ed25519 -C "work-servers-2026" -f ~/.ssh/id_ed25519_work

# Clave para proyectos personales
ssh-keygen -t ed25519 -C "personal-2026" -f ~/.ssh/id_ed25519_personal

# Clave para automatización CI/CD
ssh-keygen -t ed25519 -C "cicd-automation-2026" -f ~/.ssh/id_ed25519_cicd

Verifique las claves generadas:

# Verificar la nueva clave
ssh-keygen -l -f ~/.ssh/id_ed25519.pub

# Salida esperada:
# 256 SHA256:abcdef123456... yourname@macbook-2026-02 (ED25519)

Fase 3: Desplegar Nuevas Claves en Servidores

Para cada servidor que anteriormente usaba su clave DSA, despliegue la nueva clave pública Ed25519:

Método 1: Usando ssh-copy-id (si aún puede autenticarse)

Si tiene otro método de autenticación funcionando (contraseña, clave diferente):

# Desplegar la nueva clave usando autenticación por contraseña
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

# O especificar una clave funcionando para la autenticación durante el despliegue
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile=~/.ssh/id_rsa" user@server

Método 2: Despliegue manual (si ssh-copy-id no está disponible)

# Copiar el contenido de la clave pública
cat ~/.ssh/id_ed25519.pub | pbcopy

# Conectarse al servidor usando cualquier método que funcione (contraseña, consola, etc.)
ssh user@server

# En el servidor remoto, agregar la clave
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "PEGAR_SU_CLAVE_PÚBLICA_AQUÍ" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Método 3: Para servidores a los que no puede conectarse vía SSH

Si la clave DSA era su único método de autenticación y ya no funciona:

  1. Use la consola de gestión web del servidor (si está disponible)
  2. Acceda mediante consola física o IPMI/iLO/iDRAC
  3. Use un host de salto que todavía tenga acceso
  4. Contacte al administrador del servidor

Fase 4: Actualizar la Configuración SSH

Reemplace las referencias a claves DSA en su configuración SSH:

# Antes
Host old-server
    HostName legacy.example.com
    User admin
    IdentityFile ~/.ssh/id_dsa
    HostKeyAlgorithms +ssh-dss
    PubkeyAcceptedAlgorithms +ssh-dss

# Después
Host old-server
    HostName legacy.example.com
    User Admin
    IdentityFile ~/.ssh/id_ed25519_work

Fase 5: Limpiar los Hosts Conocidos

Elimine entradas de claves de host DSA obsoletas:

# Encontrar servidores con claves de host DSA en known_hosts
grep "ssh-dss" ~/.ssh/known_hosts

# Eliminar entradas de host específicas (la clave de host se volverá a aceptar en la próxima conexión)
ssh-keygen -R hostname_or_ip

# O eliminar todas las entradas DSA a la vez
# Primero hacer una copia de seguridad del archivo
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.backup.$(date +%Y%m%d)

# Luego eliminar las entradas DSA
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts

Fase 6: Verificar que Todo Funciona

Probar cada conexión de servidor:

# Probar conexiones con salida detallada
ssh -v old-server

# Verificar que se está ofreciendo la clave correcta
# Buscar: debug1: Offering public key: /Users/you/.ssh/id_ed25519_work ED25519

# Ejecutar una prueba de conectividad completa para todos los hosts configurados
for host in $(grep "^Host " ~/.ssh/config | awk '{print $2}' | grep -v '\*'); do
    echo "Probando: $host"
    ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" echo "OK" 2>&1
    echo "---"
done

Fase 7: Retirar la Clave DSA

Una vez que todos los servidores estén migrados y verificados:

# Archivar las claves DSA antiguas (no eliminar inmediatamente)
mkdir -p ~/.ssh/deprecated
mv ~/.ssh/id_dsa ~/.ssh/deprecated/id_dsa.retired.$(date +%Y%m%d)
mv ~/.ssh/id_dsa.pub ~/.ssh/deprecated/id_dsa.pub.retired.$(date +%Y%m%d)
chmod 400 ~/.ssh/deprecated/id_dsa.retired.*

Conserve las claves archivadas durante al menos 90 días en caso de que descubra un servidor que se le pasó por alto.


Guía Completa de Auditoría de Configuración SSH

Después de abordar los problemas individuales, realice una auditoría completa de su configuración SSH. Esto es especialmente importante si ha estado usando SSH en macOS durante años y ha acumulado entradas de configuración a través de múltiples actualizaciones de macOS.

Paso de Auditoría 1: Verificar Algoritmos Obsoletos

# Verificar CUALQUIER referencia a algoritmos obsoletos
echo "=== Verificando ~/.ssh/config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1|diffie-hellman-group14-sha1|hmac-sha1-96|hmac-md5)" ~/.ssh/config 2>/dev/null

echo ""
echo "=== Verificando /etc/ssh/ssh_config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1)" /etc/ssh/ssh_config 2>/dev/null

echo ""
echo "=== Verificando /etc/ssh/ssh_config.d/ ==="
grep -rn -E "(ssh-dss|ssh-dsa)" /etc/ssh/ssh_config.d/ 2>/dev/null

Paso de Auditoría 2: Validar la Sintaxis de Configuración

# Probar la sintaxis de configuración SSH sin conectarse
ssh -G test-host 2>&1 | head -5

# Si hay errores, aparecerán como:
# /Users/you/.ssh/config line X: Bad key types '...'

Paso de Auditoría 3: Revisar Todas las Directivas User

# Extraer todas las directivas User y los hosts a los que se aplican
awk '/^Host /{host=$2} /User /{print host, $0}' ~/.ssh/config

Revise la salida y verifique las mayúsculas de cada nombre de usuario.

Paso de Auditoría 4: Verificar Permisos de Archivos

SSH es estricto con los permisos de archivos. Los permisos incorrectos pueden causar fallas silenciosas:

# Verificar y corregir permisos del directorio SSH
echo "=== Permisos del directorio ==="
ls -la ~/.ssh/

echo ""
echo "=== Permisos esperados ==="
echo "~/.ssh/           -> drwx------ (700)"
echo "~/.ssh/config     -> -rw------- (600)"
echo "~/.ssh/id_*       -> -rw------- (600) para claves privadas"
echo "~/.ssh/*.pub      -> -rw-r--r-- (644) para claves públicas"
echo "~/.ssh/authorized_keys -> -rw------- (600)"
echo "~/.ssh/known_hosts     -> -rw-r--r-- (644)"

# Corregir permisos si es necesario
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config 2>/dev/null
chmod 600 ~/.ssh/id_* 2>/dev/null
chmod 644 ~/.ssh/*.pub 2>/dev/null
chmod 600 ~/.ssh/authorized_keys 2>/dev/null

Paso de Auditoría 5: Plantilla de Configuración SSH Moderna Recomendada

Aquí hay una plantilla de configuración SSH moderna y completa que funciona con macOS Tahoe 26.3:

# ~/.ssh/config
# Actualizado para macOS Tahoe 26.3 / OpenSSH 10.0
# Última auditoría: 2026-02-28

# ============================================
# Valores predeterminados globales
# ============================================
Host *
    # Usar claves Ed25519 por defecto
    IdentityFile ~/.ssh/id_ed25519

    # Solo ofrecer claves configuradas explícitamente para cada host
    IdentitiesOnly yes

    # Integración con macOS Keychain
    UseKeychain yes
    AddKeysToAgent yes

    # Preferencias modernas de intercambio de claves
    KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256,[email protected]

    # Estabilidad de conexión
    ServerAliveInterval 60
    ServerAliveCountMax 3

    # Endurecimiento de seguridad
    HashKnownHosts yes
    StrictHostKeyChecking ask

# ============================================
# Servidores de trabajo
# ============================================
Host prod-web
    HostName prod-web.example.com
    User Deploy
    IdentityFile ~/.ssh/id_ed25519_work
    Port 22

Host staging
    HostName staging.example.com
    User Deploy
    IdentityFile ~/.ssh/id_ed25519_work
    Port 22

# ============================================
# Servidores personales
# ============================================
Host homelab
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519_personal

# ============================================
# Configuración de host de salto
# ============================================
Host internal-*
    ProxyJump bastion.example.com
    User admin
    IdentityFile ~/.ssh/id_ed25519_work

Host bastion.example.com
    User jump-user
    IdentityFile ~/.ssh/id_ed25519_work
    ForwardAgent no

Cambios en el Agente SSH e Integración con Keychain

macOS Tahoe 26.3 también trae cambios sutiles en cómo el agente SSH interactúa con el Keychain de macOS.

Integración con Keychain

La directiva UseKeychain específica de macOS continúa funcionando en Tahoe 26.3, pero su comportamiento ha sido refinado:

# Agregar su nueva clave Ed25519 al Keychain de macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# Verificar que la clave fue agregada
ssh-add -l

Si la clave fue agregada exitosamente, verá:

256 SHA256:abcdef123456... yourname@macbook-2026-02 (ED25519)

Carga Persistente de Claves

Asegúrese de que su configuración SSH incluya estas directivas para mantener la persistencia de claves entre reinicios:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_ed25519

Sin UseKeychain yes, necesitará ejecutar ssh-add después de cada reinicio.

Verificar el Agente SSH

# Verificar si el agente está en ejecución
echo $SSH_AUTH_SOCK

# Listar claves cargadas
ssh-add -l

# Si no hay claves cargadas, agregarlas
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Para más detalles sobre las configuraciones de seguridad de macOS, consulte nuestra guía de seguridad y privacidad de macOS Tahoe.


Impacto en Pipelines CI/CD y Automatización

Los cambios SSH en macOS Tahoe 26.3 tienen implicaciones significativas para los flujos de trabajo automatizados. Si su pipeline CI/CD se ejecuta en runners de macOS (GitHub Actions, GitLab CI, Jenkins en Mac), estos cambios le afectarán después de que se actualice el sistema operativo del runner.

GitHub Actions

Si usa runners macos-latest o macos-15, el binario SSH eventualmente se actualizará. Audite sus flujos de trabajo ahora:

# .github/workflows/deploy.yml
# ANTES (potencialmente roto)
- name: Deploy
  run: |
    ssh administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"

# DESPUÉS (corregido)
- name: Deploy
  run: |
    ssh Administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"

Verifique sus secretos de despliegue:

  • DEPLOY_USER: verifique que las mayúsculas coincidan con la cuenta remota
  • SSH_PRIVATE_KEY: verifique que no sea una clave DSA
  • KNOWN_HOSTS: verifique que no haya entradas de clave de host DSA

GitLab CI

# .gitlab-ci.yml
deploy:
  before_script:
    # Verificar el tipo de clave antes de desplegar
    - ssh-keygen -l -f ~/.ssh/id_deploy
    # Asegurarse de que NO sea DSA
    - |
      if ssh-keygen -l -f ~/.ssh/id_deploy | grep -q "DSA"; then
        echo "ERROR: Clave DSA detectada. Se requiere migración."
        exit 1
      fi
  script:
    # Usar mayúsculas correctas para el nombre de usuario
    - ssh -o StrictHostKeyChecking=no Deploy@$DEPLOY_HOST "deploy.sh"

Jenkins

Para pipelines de Jenkins que se ejecutan en agentes macOS:

pipeline {
    agent { label 'macos' }
    stages {
        stage('Pre-flight SSH Check') {
            steps {
                sh '''
                    # Verificar la versión SSH
                    ssh -V

                    # Verificar claves DSA en las credenciales
                    for key in ~/.ssh/*.pub; do
                        if ssh-keygen -l -f "$key" | grep -q "DSA"; then
                            echo "WARNING: Clave DSA encontrada: $key"
                            exit 1
                        fi
                    done

                    echo "Verificación previa de SSH aprobada"
                '''
            }
        }
    }
}

Ansible Playbooks

Si ejecuta Ansible desde un nodo de control macOS:

# ansible.cfg
[defaults]
# Asegurarse del binario SSH correcto
ssh_executable = /usr/bin/ssh

# Forzar argumentos SSH específicos
[ssh_connection]
ssh_args = -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/id_ed25519_ansible

Verifique las mayúsculas de los nombres de usuario en su inventario de Ansible:

# inventory.ini
# ANTES
[webservers]
web1.example.com ansible_user=administrator

# DESPUÉS
[webservers]
web1.example.com ansible_user=Administrator

Scripts de Copia de Seguridad Automatizados

Revise cualquier tarea cron o tarea de launchd que use SSH:

# Encontrar todos los trabajos cron con referencias SSH
crontab -l 2>/dev/null | grep -i ssh

# Encontrar plists de launchd con referencias SSH
grep -rl "ssh" ~/Library/LaunchAgents/ /Library/LaunchAgents/ /Library/LaunchDaemons/ 2>/dev/null

# Verificar scripts de copia de seguridad rsync (rsync usa SSH por defecto)
grep -rn "rsync.*@" ~/scripts/ ~/bin/ 2>/dev/null

Impacto en Flujos de Trabajo de Desarrollo Remoto

VS Code Remote SSH

La extensión Remote SSH de Visual Studio Code almacena configuraciones de conexión que pueden verse afectadas:

# Ubicación de configuración SSH de VS Code
cat ~/Library/Application\ Support/Code/User/settings.json | grep -A5 "remote.SSH"

# Verificar referencias de configuración SSH de VS Code
grep -n "ssh" ~/Library/Application\ Support/Code/User/settings.json 2>/dev/null

Actualice sus destinos SSH de VS Code para usar las mayúsculas correctas del nombre de usuario y claves no DSA.

JetBrains Gateway / Desarrollo Remoto

Los IDEs de JetBrains almacenan configuraciones SSH por separado:

# Verificar configuraciones SSH de JetBrains
find ~/Library/Application\ Support/JetBrains -name "*.xml" -exec grep -l "ssh" {} \; 2>/dev/null

tmux y Sesiones Persistentes

Si usa tmux o screen sobre SSH, sus scripts de reconexión necesitan actualizarse:

# Alias de reconexión tmux común - verificar mayúsculas del nombre de usuario
alias tm='ssh -t Administrator@server "tmux attach || tmux new"'

Para una configuración completa del entorno de desarrollador, consulte nuestra guía definitiva para desarrolladores de macOS Tahoe.


Soluciones Alternativas para Infraestructura Heredada

Algunos entornos no pueden actualizarse de inmediato. Los dispositivos de red, los sistemas embebidos y los servidores heredados pueden requerir DSA durante años. Aquí hay soluciones prácticas, ordenadas de más a menos recomendadas.

Solución Alternativa 1: Usar un Host de Salto (Recomendado)

Configure un host bastión Linux que aún admita DSA y úselo como proxy:

# ~/.ssh/config
Host legacy-device
    HostName 192.168.1.1
    User admin
    ProxyJump bastion

Host bastion
    HostName bastion.example.com
    User jump
    IdentityFile ~/.ssh/id_ed25519

El host bastión ejecuta un OpenSSH más antiguo (o uno compilado con soporte DSA) y maneja la negociación DSA con el dispositivo heredado. Su Mac solo necesita autenticarse en el bastión usando Ed25519.

Solución Alternativa 2: Usar un Contenedor Docker

Ejecute un cliente OpenSSH más antiguo dentro de un contenedor Docker:

# Crear un Dockerfile para SSH heredado
cat > ~/legacy-ssh/Dockerfile << 'EOF'
FROM alpine:3.18
RUN apk add --no-cache openssh-client
ENTRYPOINT ["ssh"]
EOF

# Construirlo
docker build -t legacy-ssh ~/legacy-ssh/

# Usarlo para conectarse a dispositivos heredados
docker run --rm -it \
    -v ~/.ssh:/root/.ssh:ro \
    legacy-ssh \
    -o HostKeyAlgorithms=+ssh-dss \
    -o PubkeyAcceptedKeyTypes=+ssh-dss \
    admin@legacy-device

Crear un alias de shell para mayor comodidad:

# Agregar a ~/.zshrc
alias legacy-ssh='docker run --rm -it -v ~/.ssh:/root/.ssh:ro legacy-ssh'

# Uso
legacy-ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device

Solución Alternativa 3: Instalar un OpenSSH Antiguo vía Homebrew

Puede compilar OpenSSH 9.7p1 (la última versión con soporte DSA) desde el código fuente:

# Instalar dependencias
brew install openssl@3

# Descargar el código fuente de OpenSSH 9.7p1
curl -O https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1

# Configurar con soporte DSA y prefijo personalizado
./configure \
    --prefix=$HOME/openssh97 \
    --with-ssl-dir=$(brew --prefix openssl@3)

# Compilar e instalar
make -j$(sysctl -n hw.ncpu)
make install

# Usar el binario SSH más antiguo
~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device

Crear un alias para conexiones heredadas:

# Agregar a ~/.zshrc
alias ssh-legacy='~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss'

# Uso
ssh-legacy admin@old-router

Solución Alternativa 4: Usar una Máquina Virtual Linux

Si usa UTM, Parallels o VMware Fusion:

  1. Configure una VM Linux liviana (Alpine o Ubuntu Server)
  2. Conéctese desde su Mac a la VM (usando Ed25519)
  3. Desde la VM, conéctese al dispositivo heredado (usando DSA)

Esto proporciona aislamiento completo y no requiere modificar su instalación SSH de macOS.

A Largo Plazo: Planificar el Reemplazo de Dispositivos

Si depende de DSA porque sus dispositivos de red no admiten algoritmos modernos, esa es una señal clara de que esos dispositivos han llegado al final de su vida útil desde una perspectiva de seguridad. Planifique una línea de tiempo de reemplazo:

  • Enrutadores/Switches: La mayoría de los proveedores empresariales han admitido Ed25519 desde 2018
  • Dispositivos NAS: Synology, QNAP y TrueNAS admiten Ed25519
  • Servidores heredados: Si ejecutan OpenSSH anterior a 6.5, todo el sistema necesita actualización

Mejores Prácticas de Seguridad SSH para 2026

Con los cambios de macOS Tahoe 26.3 como catalizador, ahora es un buen momento para implementar mejoras de seguridad SSH integrales.

Mejores Prácticas de Gestión de Claves

1. Usar claves separadas para roles separados:

# Infraestructura de trabajo
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work-2026"

# Proyectos personales
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal-2026"

# CI/CD y automatización
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_automation -C "automation-2026"

# Hosting Git (GitHub, GitLab)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_git -C "git-2026"

2. Siempre usar una frase de contraseña:

Una frase de contraseña cifra su clave privada en reposo. Si su máquina se ve comprometida, el atacante no puede usar sus claves SSH sin la frase de contraseña. Combinada con la integración de macOS Keychain, solo necesita escribir la frase de contraseña una vez.

# Cuando se solicite durante la generación de claves:
Enter passphrase (empty for no passphrase): [ingrese una frase de contraseña fuerte]
Enter same passphrase again: [confirmar]

3. Rotar las claves anualmente:

Incluya el año en los comentarios de su clave para saber cuándo fueron generadas:

ssh-keygen -t ed25519 -C "you@company-2026-Q1" -f ~/.ssh/id_ed25519_work_2026

Cuando llegue el nuevo año, genere nuevas claves, despliéguelas y retire las antiguas.

4. Establecer permisos de archivo correctos:

# Claves privadas: solo lectura del propietario
chmod 400 ~/.ssh/id_ed25519*
chmod 600 ~/.ssh/id_ed25519*.pub

# En realidad, las claves públicas pueden ser legibles por todos
chmod 644 ~/.ssh/id_ed25519*.pub

# El directorio SSH en sí
chmod 700 ~/.ssh

# Archivo de configuración
chmod 600 ~/.ssh/config

Endurecimiento del Lado del Servidor

Si administra servidores SSH, aproveche esta oportunidad para endurecerlos:

# /etc/ssh/sshd_config configuración recomendada

# Deshabilitar autenticación por contraseña (solo usar claves)
PasswordAuthentication no

# Deshabilitar inicio de sesión root
PermitRootLogin no

# Solo permitir usuarios específicos
AllowUsers deploy admin

# Usar intercambio de claves moderno
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256

# Usar algoritmos de clave de host modernos
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256

# Usar cifrados modernos
Ciphers [email protected],[email protected],[email protected]

# Usar MACs modernos
MACs [email protected],[email protected]

# Limitación de velocidad
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

Después de cambiar sshd_config, siempre pruebe antes de desconectarse:

# Validar la configuración
sudo sshd -t

# Si no hay errores, reiniciar sshd
sudo systemctl restart sshd

# IMPORTANTE: Mantenga su sesión actual abierta y pruebe con una NUEVA conexión
# antes de cerrar la existente

Monitoreo y Alertas

Configure el monitoreo de eventos de autenticación SSH:

# Monitorear auth.log para intentos fallidos (servidores Linux)
tail -f /var/log/auth.log | grep "sshd"

# Monitorear el registro del sistema macOS para eventos SSH
log stream --predicate 'process == "sshd"' --level info

Solución de Errores Comunes

Error: "Connection closed by X.X.X.X port 22"

Causa: Discrepancia de mayúsculas en el nombre de usuario.

Solución:

# Determinar el nombre de usuario correcto
ssh -vvv user@host 2>&1 | grep "debug1: Sending"

# Intentar el caso contrario
ssh Administrator@host  # si 'administrator' falló
ssh administrator@host  # si 'Administrator' falló

Error: "Bad key types '+ssh-dss'"

Causa: La configuración SSH hace referencia al algoritmo DSA eliminado.

Solución:

# Encontrar y editar la línea problemática
grep -n "ssh-dss" ~/.ssh/config

# Eliminar o reemplazar la referencia al algoritmo
# Antes: HostKeyAlgorithms +ssh-dss
# Después:  (eliminar la línea completa, o reemplazar con algoritmos modernos)

Error: "Bad key types '+ssh-rsa,ssh-dss'"

Causa: La configuración SSH tiene una lista de algoritmos compuesta que incluye DSA.

Solución:

# Antes
HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss

# Después (eliminar ssh-dss, mantener ssh-rsa si es necesario para RSA heredado)
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

Nota: ssh-rsa (con firmas SHA-1) también está obsoleto. Use rsa-sha2-256 o rsa-sha2-512 si debe usar RSA:

HostKeyAlgorithms rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms rsa-sha2-512,rsa-sha2-256

Error: "No matching host key type found"

Causa: El servidor remoto solo ofrece claves de host DSA.

Solución: Esto requiere acción del lado del servidor. Genere nuevas claves de host en el servidor:

# En el servidor remoto (si tiene acceso a la consola)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
sudo systemctl restart sshd

Si no puede actualizar el servidor, use las soluciones alternativas de host de salto o Docker descritas anteriormente.

Error: "WARNING: connection is not using a post-quantum key exchange algorithm"

Causa: El servidor remoto no admite el intercambio de claves post-cuántico.

Solución:

# Suprimir para un host específico
# Agregar a ~/.ssh/config:
Host old-server
    WarnWeakCrypto no

# O suprimir globalmente (no recomendado)
Host *
    WarnWeakCrypto no

Error: "Permission denied (publickey)"

Causa: Después de la migración de clave, la nueva clave no está autorizada en el servidor.

Solución:

# Verificar qué clave se está ofreciendo
ssh -v user@host 2>&1 | grep "Offering public key"

# Desplegar la clave correcta
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

Error: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"

Causa: Después de eliminar entradas de clave de host DSA de known_hosts, el servidor ofrece un tipo de clave de host diferente.

Solución:

# Eliminar la entrada de clave de host antigua
ssh-keygen -R hostname

# Volver a conectarse y aceptar la nueva clave de host
ssh user@hostname
# Se le pedirá que verifique la nueva huella digital de clave de host

Entendiendo el Contexto Más Amplio

Los cambios SSH en macOS Tahoe 26.3 son parte de una tendencia más grande en toda la industria. Entender este contexto le ayuda a prepararse para cambios futuros en lugar de reaccionar a cada uno de ellos.

Línea de Tiempo de Versiones de OpenSSH

VersiónFechaCambios Clave
7.02015DSA deshabilitado por defecto
8.22020Firmas SHA-1 para RSA deprecadas
8.82022Firmas SHA-1 RSA deshabilitadas por defecto
9.02022KEx post-cuántico (sntrup761) habilitado por defecto
9.92024Soporte post-cuántico ML-KEM añadido
10.02025DSA eliminado completamente, ML-KEM por defecto

macOS ha tardado históricamente 6-12 meses en adoptar estas versiones, que es por qué la eliminación de DSA está afectando a los usuarios de macOS a principios de 2026 a pesar de estar en OpenSSH 10.0 desde abril de 2025.

Qué Esperar Próximamente

Basado en la hoja de ruta de desarrollo de OpenSSH:

  • Las firmas SHA-1 RSA (ssh-rsa) probablemente se eliminarán completamente en OpenSSH 11.x
  • ECDSA con curvas NIST puede ser deprecado en favor de Ed25519
  • Las firmas post-cuánticas (no solo el intercambio de claves) serán añadidas
  • La autenticación basada en certificados será cada vez más promovida sobre las claves públicas sin procesar

Prepárese ahora:

  1. Asegurándose de que todas sus claves sean Ed25519
  2. Moviéndose a rsa-sha2-256/512 si debe usar RSA
  3. Probando el intercambio de claves post-cuántico con sus servidores
  4. Evaluando la infraestructura de certificados SSH para su organización

Para más detalles sobre qué cambió en la actualización más amplia de macOS Tahoe 26.3, consulte nuestra guía de versión de macOS Tahoe 26.3.


Referencia Rápida: Comandos que Necesita

Aquí hay una referencia consolidada de cada comando mencionado en esta guía, organizada por tarea:

Diagnóstico

# Verificar la versión SSH
ssh -V

# Prueba de conexión detallada
ssh -vvv user@host

# Verificar qué binario SSH se está usando
which ssh

# Probar sin archivo de configuración
ssh -F /dev/null user@host

# Verificar tipos de claves actuales
for key in ~/.ssh/*.pub; do
    echo "=== $key ==="
    ssh-keygen -l -f "$key"
done

Generación de Claves

# Generar clave Ed25519 (recomendado)
ssh-keygen -t ed25519 -C "description-YYYY" -f ~/.ssh/id_ed25519

# Generar clave RSA (si Ed25519 no es compatible con el destino)
ssh-keygen -t rsa -b 4096 -C "description-YYYY" -f ~/.ssh/id_rsa

Despliegue de Claves

# Desplegar clave en servidor remoto
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

# Agregar clave al Keychain de macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Auditoría de Configuración

# Encontrar referencias DSA en la configuración
grep -n "ssh-dss" ~/.ssh/config /etc/ssh/ssh_config

# Encontrar todas las directivas User
grep -n "User " ~/.ssh/config

# Validar la sintaxis de configuración
ssh -G test-host

# Corregir permisos
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 400 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub

Limpieza

# Eliminar clave de host antigua
ssh-keygen -R hostname

# Eliminar todas las entradas DSA de known_hosts
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts

Preguntas Frecuentes

¿Puedo hacer un downgrade de OpenSSH en macOS Tahoe 26.3 para restaurar el soporte DSA?

No puede reemplazar el binario del sistema OpenSSH en macOS debido a la Protección de Integridad del Sistema (SIP). Sin embargo, puede instalar una versión más antigua a través de Homebrew o compilar desde el código fuente en una ubicación personalizada. El ssh del sistema en /usr/bin/ssh siempre será la versión OpenSSH 10.0 que se incluyó con Tahoe 26.3. Consulte la sección "Soluciones Alternativas para Infraestructura Heredada" para obtener instrucciones detalladas sobre cómo compilar OpenSSH 9.7p1 desde el código fuente.

¿El cambio de sensibilidad a mayúsculas en los nombres de usuario es permanente o es un error?

Basado en las notas de versión de OpenSSH 10.0 y la dirección del proyecto, esto parece ser un comportamiento intencional que se alinea con la especificación del protocolo SSH (RFC 4252), que define los nombres de usuario como sensibles a mayúsculas. Apple no ha comentado si esto es un error y no hay indicación de que se vaya a revertir. Debe tratar esto como el comportamiento permanente y actualizar sus configuraciones en consecuencia.

¿Mis claves RSA también dejarán de funcionar?

Las claves RSA con firmas SHA-2 (rsa-sha2-256 y rsa-sha2-512) continúan funcionando y serán admitidas en el futuro previsible. Sin embargo, las claves RSA con firmas SHA-1 (ssh-rsa) han sido deshabilitadas por defecto desde OpenSSH 8.8 y probablemente serán eliminadas por completo en una versión futura. Si usa claves RSA, verifique que tengan al menos 3072 bits y que sus servidores acepten firmas SHA-2. Para nuevas claves, Ed25519 es la opción preferida.

¿Cómo arreglo las conexiones SSH de macOS a Windows Server?

La implementación OpenSSH de Windows Server ha sido históricamente insensible a las mayúsculas para los nombres de usuario. Después de la actualización de macOS Tahoe 26.3, debe usar las mayúsculas exactas que reconoce Windows. Para cuentas de dominio, use DOMAIN\Username o [email protected]. Para cuentas locales, verifique el nombre de la cuenta en Administración de equipos. Actualice su ~/.ssh/config en consecuencia:

Host windows-server
    HostName win.example.com
    User DOMAIN\\AdminUser
    IdentityFile ~/.ssh/id_ed25519

¿Esto también afecta a SFTP y SCP?

Sí. Tanto sftp como scp usan la misma biblioteca de cliente SSH y están sujetos a la misma aplicación de sensibilidad a mayúsculas y eliminación de DSA. Cualquier cliente SFTP (como Cyberduck, Transmit o FileZilla) que use el binario SSH del sistema también se verá afectado. Los clientes SFTP GUI que incluyen su propia biblioteca SSH (como Cyberduck con su propia compilación de libssh2) pueden no verse afectados, pero esto depende de la aplicación específica.


Conclusión

macOS Tahoe 26.3 envió cambios SSH que rompieron flujos de trabajo establecidos sin advertencia adecuada. La aplicación de nombres de usuario sensibles a mayúsculas, la eliminación completa de DSA y las advertencias de intercambio de claves post-cuántico requieren atención cada una, pero todas son sencillas de resolver una vez que comprende qué cambió.

Los elementos de acción inmediata son:

  1. Auditar su ~/.ssh/config para detectar discrepancias de mayúsculas en las directivas User y eliminar cualquier referencia a ssh-dss
  2. Generar claves Ed25519 para reemplazar cualquier clave DSA restante
  3. Desplegar las nuevas claves en todos los servidores de su inventario
  4. Actualizar scripts de automatización y pipelines CI/CD con las mayúsculas correctas del nombre de usuario y rutas de claves
  5. Silenciar o resolver las advertencias post-cuánticas según su postura de seguridad

Estos cambios, aunque disruptivos, empujan el ecosistema SSH de macOS hacia valores predeterminados de seguridad más sólidos. Ed25519 es más rápido, más seguro y produce claves más pequeñas que DSA. Los nombres de usuario sensibles a mayúsculas se alinean con la especificación del protocolo SSH. El intercambio de claves post-cuántico protege contra amenazas futuras. El dolor de la migración es real, pero las mejoras de seguridad son sustanciales.

Si está configurando un nuevo entorno de desarrollo en macOS Tahoe, comience con nuestra guía de configuración de desarrollador de macOS Tahoe para configurar todo correctamente desde el principio. Para una configuración de seguridad más amplia, nuestra guía de seguridad y privacidad de macOS Tahoe cubre la pila de seguridad completa más allá de SSH.