¿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.
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 local | Sí | Crear un usuario local específico para SSH y usar claves públicas. |
Cuenta de dominio (AD) | Sí | Usar el formato "DOMINIO\usuario" y, preferiblemente, claves públicas. |
Cuenta Microsoft (MSA) | No | Convertir 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ón | Comando | Resultado esperado |
---|---|---|
Servicio activo | Get-Service sshd | Estado: Running; Inicio: Automatic |
Puerto abierto | Test-NetConnection -Port 22 -ComputerName localhost | TcpTestSucceeded = True |
Firewall habilitado | Get-NetFirewallRule -Name OpenSSH-Server-In-TCP | Enabled: True |
Ruta de claves | $env:USERPROFILE\.ssh\authorized_keys | Archivo existe y tiene tu clave |
Permisos de claves | icacls ~/.ssh/authorized_keys | Solo 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 conicacls
y reiniciasshd
. - 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
: sisshdconfig
tiene Match Group administrators, mueve la clave aC:\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
Aspecto | SSH | RDP |
---|---|---|
Cuenta Microsoft (MSA) | No soportada en Windows 10 | Soportada |
Automatización y scripts | Excelente | Limitada |
Uso de claves | Recomendado | No aplica |
Consumo de ancho de banda | Muy bajo | Mayor (sesión gráfica) |
Notas y aclaraciones útiles
- No intentes formatos como
MicrosoftAccount\correo@dominio.com
ousuario@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
- Verifica que
sshd
esté en ejecución y al arranque. - Confirma que el puerto 22/TCP está permitido en el firewall y, si procede, en el router.
- Usa un usuario local o de dominio (no MSA).
- Coloca la clave en la ruta correcta y con permisos estrictos.
- Desactiva
PasswordAuthentication
si ya funciona la clave. - 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
niusuario@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.