Cómo configurar un servidor SFTP (SSH FTP) en Windows

Configurar tu servidor SFTP OpenSSH en Windows puede ser un poco complicado, sobre todo si lo haces por primera vez. Podrías encontrarte con algún problema, como que el servicio SSH no se inicie automáticamente, que las reglas del firewall no estén configuradas o que los archivos de configuración no sean correctos. La buena noticia es que, si sigues los pasos y revisas la configuración cuidadosamente, tendrás una configuración de transferencia segura mucho mejor que las herramientas de terceros poco prácticas. Esta configuración es bastante flexible y funciona en todo, desde Windows 10 (a partir de la compilación 1803) hasta Windows Server 2022, con algunas diferencias según la versión. Al final, podrás transferir archivos de forma segura por SSH sin revelar tus contraseñas ni depender de opciones FTP poco fiables. Y si eres como la mayoría, mi motivación era simplemente buscar mayor seguridad y una administración más sencilla. Un aviso: dependiendo de tu versión de Windows, algunos comandos o rutas pueden variar ligeramente, pero la idea principal es la misma.

Cómo hacer que OpenSSH funcione en Windows para SFTP

Cómo instalar OpenSSH en Windows

Aquí es donde las cosas se complican con Windows: a veces, OpenSSH viene preinstalado, otras veces hay que instalarlo manualmente. En las versiones más recientes de Windows 10 (como la 1803 o posterior), Windows 11 o Windows Server 2019/2022, OpenSSH es opcional. Se puede instalar mediante PowerShell, ya que, por supuesto, Windows tiene que complicarlo más de lo necesario.

  • Abra PowerShell como administrador y ejecute:Add-WindowsCapability -Online -Name OpenSSH. Server*
  • O, si prefieres la línea de comandos, utiliza:dism /Online /Add-Capability /CapabilityName:OpenSSH. Server~~~~0.0.1.0
  • En el estilo GUI, vaya a Configuración > Aplicaciones > Funciones opcionales > Agregar una función, luego busque e instale OpenSSH Server.
  • Comprueba si está instalado con:Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Una vez instalados, los ejecutables suelen estar en c:\windows\system32\OpenSSH\. El archivo de configuración principal es sshd_config en C:\ProgramData\ssh. Si esa carpeta no está ahí inicialmente, deberá iniciar primero el servicio sshd; Windows crea la carpeta dinámicamente.

Nota: En algunas compilaciones de Windows anteriores, como la 1809 o Windows Server 2016, deberá descargar Win32-OpenSSH desde GitHub. Extraiga los archivos en un lugar como [ nombre del archivo C:\OpenSSH-Win] y siga las instrucciones de instalación, incluyendo agregar la carpeta a la variable de entorno Path. Además, ejecútelo .\install-sshd.ps1desde PowerShell en ese directorio (úselo powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1si los scripts están bloqueados).Una vez instalado, habilite el servicio:

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

Configuración del servicio SSH y del firewall

Ahora, es fundamental asegurarse de que se inicie automáticamente y abra el puerto 22. En Windows moderno, puedes hacer lo siguiente:

 New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH 

Si ese comando no funciona, probablemente en compilaciones anteriores o en ciertas configuraciones empresariales, prueba esto:

 netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22 

Esto abre el puerto 22 del Firewall de Windows Defender, por lo que tu servidor SSH no se bloqueará. Ten en cuenta que si estás protegido por un firewall o router corporativo más estricto, también tendrás que abrir el puerto 22.

Ajuste de sshd_config para SFTP

Abra el archivo de configuración en un editor de texto, como el Bloc de notas:

C:\ProgramData\ssh\sshd_config 

Busque la línea sftp del subsistema. Debería verse así:

Subsystem sftp sftp-server.exe 

Si está comentado o apunta a algo incorrecto, corrígelo. También puedes ajustar otras opciones aquí:

  • Configura «Permitir grupos» para restringir quién puede conectarse (usa tu dominio o grupos locales).Ejemplo:AllowGroups domain\sftpusers
  • Habilitar la autenticación de contraseña con:AuthenticationMethods password
  • Configure el directorio chroot de cada usuario (donde se conectan) con ChrootDirectory y ForceCommand internal-sftp. Por ejemplo:
Match User username ChrootDirectory C:\SFTP\username ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no 

En algunas configuraciones, es útil reiniciar el servicio sshd después de los cambios:

Restart-Service sshd 

Conexión a su servidor SFTP

Ahora que todo está configurado, es hora de conectarse. Puede usar clientes gratuitos como WinSCP o PowerShell con módulos como Posh-SSH. Para WinSCP, simplemente configure el protocolo como SFTP, introduzca la IP o el nombre de host, el nombre de usuario y la contraseña o clave SSH de su servidor. Al conectarse, podría recibir una advertencia indicando que la clave de host no está en caché; simplemente acéptela si confía en el servidor (o verifique la huella digital manualmente).

A continuación se muestra un fragmento rápido de PowerShell para probar la conexión con el módulo Posh-SSH :

 Install-Module -Name Posh-SSH $cred = Get-Credential $session = New-SFTPSession -ComputerName 192.168.1.100 -Credential $cred Get-SFTPChildItem -SFTPSession $session -Path / #...do stuff...Remove-SFTPSession -SFTPSession $session 

Si prefiere la línea de comandos incorporada, abra PowerShell y ejecute:

sftp username@server 

O especifica una clave privada SSH -i path\to\privatekeysi optas por la autenticación basada en claves. Es bastante sencillo una vez que te acostumbras.

Configuración de autenticación de clave pública

Esta parte es un poco engorrosa, pero vale la pena si quieres iniciar sesión sin contraseña. Creas claves SSH localmente con [nombre del dominio] ssh-keygen -t ed25519. Genera id_ed25519 (privado) e id_ed25519.pub (público).

Copie el archivo id_ed25519.pub al servidor SFTP y colóquelo en el directorio del usuario C:\Users\username\.ssh\authorized_keys. Asegúrese de que los permisos sean correctos, ya que Windows no es muy tolerante si el archivo no es accesible solo para el usuario correcto.

Luego, configure su cliente SSH (como WinSCP o PowerShell) para usar esa clave privada. En WinSCP: vaya a Avanzado > SSH > Autenticación y seleccione el archivo de clave privada. Con PowerShell, puede especificar el archivo de clave como en el ejemplo anterior.

Y sí, una vez configurado correctamente, te conectarás sin tener que introducir tu contraseña cada vez. No sé por qué funciona, pero…funciona.

Resumen

Todo el proceso puede parecer un poco complicado si eres nuevo, pero una vez configurado todo, tu equipo Windows puede ser un servidor SFTP bastante seguro y fiable. Solo ten en cuenta los detalles de configuración: establecer los permisos correctos, abrir los puertos y editar sshd_config correctamente; eso es lo que determina el éxito o el fracaso de la configuración. Prueba primero la conexión con WinSCP; si funciona, PowerShell será pan comido. Configurar la autenticación de claves requiere un poco más de esfuerzo, pero vale la pena por la comodidad y la seguridad.

Resumen

  • Instale OpenSSH mediante PowerShell o GUI, según la versión de Windows.
  • Habilite e inicie el servicio sshd, configúrelo para que se inicie automáticamente.
  • Configure las reglas de firewall para permitir el puerto 22.
  • Ajuste sshd_config para que coincida con sus preferencias de seguridad y directorio.
  • Pruebe con módulos WinSCP o PowerShell.
  • Configure claves SSH para iniciar sesión sin contraseña si lo desea.

Resumen

Espero que esto les dé una idea clara de cómo convertir Windows en un servidor SFTP adecuado. No es perfecto (Windows puede ser un poco peculiar con los permisos y las rutas de configuración), pero este enfoque es mucho mejor que algunas de las opciones más antiguas y complicadas. Con todo listo, transferir archivos de forma segura por SSH se vuelve mucho más fácil y seguro. Ojalá esto ayude a alguien a superar ese obstáculo inicial: configurar SSH en Windows es lo suficientemente extraño como para confundirte varias veces.