Instalación, prueba y desinstalación de un servidor SFTP basado en OpenSSH en Windows
Esta guía se aplica a Windows Server 2019, 2022 y 2025, que incluyen OpenSSH Server como una característica opcional integrada. No se requiere ninguna descarga de terceros.
Guía paso a paso
Instalación de la característica OpenSSH Server
1) Inicie PowerShell como administrador: Inicio, escriba "PowerShell" → haga clic con el botón derecho en "PowerShell" → Ejecutar como administrador.
2) Compruebe si la característica OpenSSH Server ya está instalada:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Nota: Aquí se enumeran tanto OpenSSH.Client como OpenSSH.Server. Asegúrese de comprobar específicamente el estado de OpenSSH.Server, el componente de cliente puede estar ya instalado y no es lo que cubre esta guía.
Si OpenSSH.Server muestra el estado State : NotPresent, instálelo:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Nota: Windows instala la característica integrada OpenSSH Server en C:\Windows\System32\OpenSSH\. No instale OpenSSH manualmente directamente en C:\Windows, esto infringe las convenciones de directorios de Windows y puede causar problemas de permisos.
3) Inicie el servicio sshd y configúrelo para que se inicie automáticamente:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4) Compruebe que el servicio se está ejecutando:
Get-Service sshd

El campo Status debería mostrar Running. Para confirmar también que el tipo de inicio está establecido en Automatic:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5) Compruebe la ubicación del binario de OpenSSH instalado y la información de versión:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

El campo Source confirma que la ruta de instalación coincide con C:\Windows\System32\OpenSSH\sshd.exe; FileVersionInfo muestra la versión de OpenSSH (por ejemplo, OpenSSH_8.1p1, FileVersion 8.1.0.1 en Windows Server 2022).
Apertura del puerto del cortafuegos
De forma predeterminada, al instalar la característica OpenSSH Server normalmente se crea automáticamente una regla de cortafuegos de entrada llamada OpenSSH-Server-In-TCP. Confirme que existe y está habilitada:
Get-NetFirewallRule -Name *OpenSSH-Server*

Si la regla no existe, créela manualmente (observe el nombre de regla diferente, esta regla creada manualmente es independiente de la regla OpenSSH-Server-In-TCP generada automáticamente):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Compruebe que el puerto está realmente abierto y a la escucha:
Test-NetConnection -ComputerName localhost -Port 22

Un resultado TcpTestSucceeded : True confirma que el servicio está a la escucha localmente. Esto no confirma que el cortafuegos esté dejando pasar el tráfico desde el exterior, para verificarlo completamente, ejecute el mismo comando desde otra máquina de la red, sustituyendo localhost por la dirección IP del servidor.
Configuración de sshd_config para SFTP
El archivo de configuración se encuentra en:
C:\ProgramData\ssh\sshd_config
Ábralo en un editor de texto con derechos de administrador (por ejemplo, Notepad ejecutado como administrador) y confirme que los siguientes ajustes están presentes (o configurados según sea necesario):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Nota de seguridad: PasswordAuthentication yes se muestra aquí para mantener esta guía sencilla, pero para un servidor de producción expuesto a Internet, la autenticación basada en claves con PasswordAuthentication no es la opción más segura. Consulte el ajuste opcional AuthorizedKeysFile más abajo si tiene previsto utilizar la autenticación basada en claves.
Importante: La línea Subsystem sftp define qué binario gestiona las sesiones SFTP. Sin esta línea presente y sin comentar, las conexiones SSH funcionarán, pero la transferencia de archivos SFTP fallará.
De forma predeterminada, esta línea ya está presente y sin comentar en el archivo de configuración de la característica integrada. Si falta o está comentada con #, añádala o quítele el comentario y, a continuación, guarde el archivo.
Nota: Las versiones más recientes de OpenSSH también admiten Subsystem sftp internal-sftp, un gestor integrado que no llama a un binario externo:
Subsystem sftp internal-sftp
Tanto sftp-server.exe como internal-sftp funcionan; esta guía utiliza sftp-server.exe, ya que es el valor que viene de forma predeterminada.
Ajustes opcionales que también puede querer incluir en sshd_config:
# Valor predeterminado, ya establecido; se muestra aqui como referencia si la autenticacion basada en claves no funciona # AuthorizedKeysFile .ssh/authorized_keys # Restringir el acceso a usuarios especificos (opcional) # AllowUsers username1 username2 # Registro SyslogFacility LOCAL0 LogLevel INFO
Nota: Para las cuentas que son miembros del grupo local Administradores, la versión de OpenSSH para Windows utiliza un archivo diferente: C:\ProgramData\ssh\administrators_authorized_keys, no .ssh\authorized_keys en el perfil del usuario. Si la autenticación basada en claves para una cuenta de administrador no funciona como se espera, compruebe este archivo en su lugar.
Después de cualquier cambio en sshd_config, reinicie el servicio para aplicarlo:
Restart-Service sshd
Comprobación de la conexión SFTP mediante WinSCP
Instale y ejecute el cliente gratuito WinSCP. En la ventana de configuración de la conexión, seleccione el protocolo de transferencia de archivos SFTP, introduzca el nombre de host o la dirección IP del servidor en el campo Host name, deje el campo Port number en 22 (a menos que haya configurado un puerto diferente) e introduzca las credenciales de la cuenta de Windows con la que se está conectando.

Si todo está configurado correctamente, el cliente se conecta al servidor SFTP y muestra el contenido del directorio personal del usuario (el directorio de perfil predeterminado). De forma predeterminada, el usuario accede a C:\Users\<username>. Los archivos pueden entonces transferirse de forma segura entre el servidor y el cliente a través del protocolo SFTP.

Desinstalación de la característica OpenSSH Server
1) Inicie PowerShell como administrador.
2) Detenga el servicio sshd antes de eliminar la característica, eliminarla mientras el servicio sigue en ejecución o en uso activo puede fallar o quedarse bloqueado:
Stop-Service sshd
3) Elimine la característica:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4) (Opcional) Elimine la regla de cortafuegos. Esto cubre tanto la regla creada automáticamente como la creada manualmente, en caso de que alguna exista:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5) (Opcional) Eliminación de la configuración: puede eliminar solo el archivo de configuración o realizar una limpieza completa incluyendo las claves de host.
Para eliminar solo sshd_config sin tocar las claves de host:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Para una limpieza completa incluyendo las claves de host, elimine en su lugar toda la carpeta de configuración:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Advertencia: Al eliminar toda la carpeta también se eliminan de forma permanente las claves de host del servidor. Los clientes que se conecten después de una reinstalación tratarán el servidor como un host SSH nuevo y no reconocido. Haga esto solo si no tiene previsto reinstalar OpenSSH Server con la misma configuración más adelante.