SSH en Windows 10 con cuenta Microsoft: por qué no funciona y cómo conectarte con cuentas locales o de dominio

¿Intentas iniciar sesión por SSH en Windows 10 usando tu cuenta de Microsoft (Outlook/Hotmail) y el servidor siempre rechaza la contraseña? No es un error puntual: el OpenSSH de Windows 10 no admite autenticación directa con MSA. A continuación te explico por qué y cómo conectarte de forma fiable con cuentas locales o de dominio.

Índice

Respuesta corta y mensaje clave

  • No es posible de forma nativa iniciar sesión por SSH en Windows 10 con una cuenta de Microsoft (MSA).
  • Sí es posible con cuentas locales o cuentas de dominio (Active Directory).
  • La práctica recomendada es usar autenticación por claves públicas, no por contraseña.

Por qué falla con cuentas Microsoft en Windows 10

En Windows 10, el servidor OpenSSH se integra con el subsistema de seguridad local (LSA) para emitir el token del usuario. Las cuentas de Microsoft (MSA) no son cuentas locales ni de dominio: son identidades en la nube cuyo inicio de sesión se “vincula” a un perfil local. Esta vinculación funciona para el inicio de sesión interactivo en consola o RDP, pero no se traduce en una identidad que OpenSSH pueda validar de manera confiable mediante contraseña.

Resultado típico: intentas ssh MicrosoftAccount\correo@outlook.com@equipo o variantes como ssh correo@outlook.com@equipo; SSH te pide la contraseña y la rechaza siempre con Permission denied. No es tu password: es una limitación de la pila de autenticación en Windows 10.

Escenarios compatibles y opciones reales

Escenario¿Funciona con SSH en Windows 10?Recomendación
Cuenta localCrear un usuario local específico para SSH y usar claves públicas.
Cuenta de dominio (AD)Usar el formato "DOMINIO\usuario" y, preferiblemente, claves públicas.
Cuenta Microsoft (MSA)NoConvertir a local o crear un usuario local adicional; en empresas, usar AD.

Flujo recomendado con cuenta local

Este flujo funciona en Windows 10 Home y Pro siempre que esté instalado y activo el servidor OpenSSH.

Crear un usuario local

  • Interfaz: Configuración → Cuentas → Familia y otros usuarios → Agregar otra persona a este equipo → Agregar usuario sin cuenta Microsoft.
  • Comando (PowerShell o CMD con privilegios): net user usuario_local ContraseñaFuerte123! /add
  • Privilegios (opcional): Para agregar a Administradores: net localgroup Administrators usuario_local /add

Instalar y habilitar OpenSSH Server

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' | Enable-NetFirewallRule

Fijar PowerShell como shell predeterminado (opcional)

Por defecto, el shell puede ser cmd.exe. Para usar PowerShell al entrar por SSH:

New-ItemProperty `
  -Path 'HKLM:\SOFTWARE\OpenSSH' `
  -Name DefaultShell `
  -Value 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' `
  -PropertyType String -Force
Restart-Service sshd

Configurar autenticación por claves públicas

En el cliente genera un par de claves (recomendado ed25519):

ssh-keygen -t ed25519 -C "equipo-cliente"

En el servidor Windows prepara la carpeta .ssh y el archivo de claves autorizadas:

$ssh = "$env:USERPROFILE\.ssh"
New-Item -ItemType Directory -Force -Path $ssh | Out-Null
New-Item -ItemType File -Force -Path "$ssh\authorized_keys" | Out-Null

Endurecer permisos (equivalente a 700 para carpeta y 600 para archivo)

icacls \$ssh /inheritance\:r
icacls \$ssh /grant\:r "\$env\:USERNAME:(OI)(CI)(F)" Administrators:(RX) SYSTEM:(F)
icacls "\$ssh\authorized\_keys" /inheritance\:r
icacls "\$ssh\authorized\_keys" /grant\:r "\$env\:USERNAME:(R)" Administrators:(R) SYSTEM:(R) 

Pega la clave pública del cliente (contenido de ided25519.pub) dentro de authorizedkeys en una línea.

Conexión al equipo

ssh usuariolocal@IPonombreequipo

Si usas un puerto no estándar:

ssh -p 22 usuario_local@equipo

Consideraciones importantes con cuentas de Administrador

En muchos builds de Windows 10, el sshd_config incluye una regla especial para miembros del grupo Administrators que cambia la ruta del archivo de claves autorizadas a:

C:\ProgramData\ssh\administratorsauthorizedkeys

Si tu usuario local pertenece a Administrators y no logras autenticar por clave, revisa C:\ProgramData\ssh\sshd_config y verifica si existe un bloque como:

Match Group administrators
       AuthorizedKeysFile PROGRAMDATA/ssh/administratorsauthorizedkeys

En ese caso, coloca la clave pública en ese archivo (con permisos restrictivos) y reinicia el servicio:

notepad 'C:\ProgramData\ssh\administratorsauthorizedkeys'
Restart-Service sshd

Configuración de seguridad recomendada en sshd_config

Ruta típica: C:\ProgramData\ssh\sshd_config. Ajustes útiles:

# Solo si ya usas claves
PasswordAuthentication no

Asegura que Pubkey esté habilitado

PubkeyAuthentication yes

Restringe quién puede entrar

AllowUsers usuario\_local "CONTOSO\maria"

Opcional: reduce intentos e impacto de fuerza bruta

MaxAuthTries 3
LoginGraceTime 30 

Tras modificar, reinicia el servicio:

Restart-Service sshd

Flujo en entornos corporativos con dominio

Si el equipo está unido a un dominio Active Directory, puedes conectarte con una cuenta del dominio. Dos patrones comunes:

ssh "CONTOSO\maria"@servidor
o bien:
ssh -l "CONTOSO\maria" servidor

Las comillas son importantes para que el intérprete no confunda la barra invertida. Mantén la recomendación de usar claves públicas, gestionándolas según las políticas de tu organización.

Tabla de verificación rápida

ComprobaciónComandoResultado esperado
Servicio activoGet-Service sshdEstado: Running; Inicio: Automatic
Puerto abiertoTest-NetConnection -Port 22 -ComputerName localhostTcpTestSucceeded = True
Firewall habilitadoGet-NetFirewallRule -Name OpenSSH-Server-In-TCPEnabled: True
Ruta de claves$env:USERPROFILE\.ssh\authorized_keysArchivo existe y tiene tu clave
Permisos de clavesicacls ~/.ssh/authorized_keysSolo usuario, Administrators y SYSTEM

Solución de problemas frecuentes

  • Permission denied (publickey,password): la clave no está en la ruta correcta, el archivo se llama authorized_keys (con guion bajo), o los permisos son demasiado permisivos. Ajusta con icacls y reinicia sshd.
  • Se solicita contraseña y falla siempre: estás intentando con MSA. Usa una cuenta local o de dominio.
  • Usuario en Administrators pero clave en %USERPROFILE%\.ssh: si sshdconfig tiene Match Group administrators, mueve la clave a C:\ProgramData\ssh\administratorsauthorized_keys.
  • No conecta desde fuera: comprueba NAT/puerto 22 en el router y reglas del firewall de Windows.
  • Diagnóstico detallado del cliente: ejecuta con verbosidad: ssh -vvv usuario_local@equipo
  • Logs del servidor: revisa C:\ProgramData\ssh\logs\sshd.log (si existe) o el Visor de eventos en Applications and Services Logs → OpenSSH → Operational.

Buenas prácticas de seguridad

  • Claves en lugar de contraseñas. Desactiva PasswordAuthentication una vez verificado el acceso por clave.
  • Usuarios dedicados para tareas automatizadas y sin privilegios innecesarios.
  • Restricción de alcance con AllowUsers/AllowGroups.
  • Cambio de puerto (defensa básica contra escaneo; no sustituye otras medidas).
  • Reglas de firewall por IP si conoces de antemano los clientes.
  • Actualiza Windows y OpenSSH a las versiones recomendadas para tu entorno.

Plantillas de comandos listas para pegar

Preparar servidor de cero

# Ejecutar en PowerShell con privilegios
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' | Enable-NetFirewallRule

Crear usuario local y habilitar clave

# Usuario local
net user devops ContraseñaFuerte123! /add

Carpeta y archivo de claves

\$ssh = "C:\Users\devops.ssh"
New-Item -ItemType Directory -Force -Path \$ssh | Out-Null
New-Item -ItemType File -Force -Path "\$ssh\authorized\_keys" | Out-Null

Permisos mínimos

icacls \$ssh /inheritance\:r
icacls \$ssh /grant\:r "devops:(OI)(CI)(F)" Administrators:(RX) SYSTEM:(F)
icacls "\$ssh\authorized\_keys" /inheritance\:r
icacls "\$ssh\authorized\_keys" /grant\:r "devops:(R)" Administrators:(R) SYSTEM:(R)

Reinciar servicio (por si retocas sshd\_config)

Restart-Service sshd 

Conectar desde el cliente

ssh devops@mi-equipo.local

Comparativa rápida SSH vs RDP en cuentas Microsoft

AspectoSSHRDP
Cuenta Microsoft (MSA)No soportada en Windows 10Soportada
Automatización y scriptsExcelenteLimitada
Uso de clavesRecomendadoNo aplica
Consumo de ancho de bandaMuy bajoMayor (sesión gráfica)

Notas y aclaraciones útiles

  • No intentes formatos como MicrosoftAccount\correo@dominio.com o usuario@outlook.com para SSH en Windows 10: fallará.
  • Si no quieres convertir tu sesión MSA a local, crea un usuario local adicional solo para SSH.
  • El archivo correcto se llama authorized_keys (con guion bajo). Cualquier otra variante no funciona.
  • En cuentas Administrators, revisa si tu configuración exige usar administratorsauthorizedkeys.
  • En dominios, cita el usuario con comillas para preservar la barra invertida: "DOMINIO\usuario".

Checklist final antes de dar por bueno el acceso

  1. Verifica que sshd esté en ejecución y al arranque.
  2. Confirma que el puerto 22/TCP está permitido en el firewall y, si procede, en el router.
  3. Usa un usuario local o de dominio (no MSA).
  4. Coloca la clave en la ruta correcta y con permisos estrictos.
  5. Desactiva PasswordAuthentication si ya funciona la clave.
  6. Restringe quién puede acceder con AllowUsers/AllowGroups.

Script de instalación y endurecimiento en un paso

Este script instala, habilita el servicio, crea usuario local y configura claves con permisos seguros. Edita los valores de usuario y clave pública antes de ejecutarlo.

$User = "remoteops"
$Password = "ContraseñaFuerte123!"
$PubKey = @"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEXAMPLEEXAMPLEEXAMPLEEXAMPLE equipo-cliente
"@

Instalar y activar OpenSSH Server

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 | Out-Null
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' | Enable-NetFirewallRule | Out-Null

Crear usuario local

net user \$User \$Password /add | Out-Null

Preparar carpeta .ssh y authorized\_keys

\$ProfilePath = "C:\Users\$User"
\$SshDir = Join-Path \$ProfilePath ".ssh"
New-Item -ItemType Directory -Path \$SshDir -Force | Out-Null
\$AuthKeys = Join-Path \$SshDir "authorized\_keys"
\$PubKey | Out-File -FilePath \$AuthKeys -Encoding ascii -Force

Permisos mínimos

icacls \$SshDir /inheritance\:r
icacls \$SshDir /grant\:r "\$User:(OI)(CI)(F)" Administrators:(RX) SYSTEM:(F)
icacls \$AuthKeys /inheritance\:r
icacls \$AuthKeys /grant\:r "\$User:(R)" Administrators:(R) SYSTEM:(R)

Write-Host "Listo. Prueba: ssh \$User@\" 

Conclusión

Si lo que necesitas es acceso remoto por terminal a Windows 10, no pierdas tiempo intentando autenticar con una cuenta Microsoft: no es compatible con el OpenSSH del sistema. La estrategia ganadora es crear una cuenta local (o usar una cuenta de dominio), activar claves públicas, afinar sshdconfig y aplicar permisos estrictos a authorizedkeys. Con ese enfoque tendrás un acceso predecible, seguro y mantenible para tus tareas de administración.


Anexo: guía de referencia rápida

Pasos mínimos con cuenta local

  • Crear usuario local (GUI o net user usuario_local ContraseñaFuerte /add).
  • (Opcional) Agregar a Administrators.
  • Verificar sshd corriendo; abrir puerto 22/TCP.
  • Generar clave en el cliente y copiar la pública a C:\Users\usuariolocal\.ssh\authorizedkeys con permisos correctos.
  • Conectarse con ssh usuario_local@equipo.

Ajustes útiles en sshd_config

  • PubkeyAuthentication yes para habilitar claves.
  • PasswordAuthentication no cuando ya usas claves.
  • AllowUsers/AllowGroups para cerrar la puerta a cuentas no deseadas.

Cosas a evitar y aclaraciones

  • No uses MicrosoftAccount\correo@dominio.com ni usuario@outlook.com: no funcionará en Windows 10.
  • No confundas RDP (sí soporta MSA) con SSH (no soporta MSA en Windows 10).
  • Si estás en Administrators, puede aplicar la ruta administratorsauthorizedkeys.

Comandos útiles

# Instalar OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Iniciar y habilitar

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

Abrir firewall

Get-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' | Enable-NetFirewallRule

Conexión

En Linux/macOS/Windows (cliente):

ssh usuario\local\@IP\o\nombre\equipo 

Con lo anterior podrás iniciar sesión por SSH en Windows 10 de forma fiable usando cuentas locales o de dominio, aplicando además prácticas de seguridad sólidas basadas en claves públicas.

Índice