Instalación de un servidor SFTP en Windows Server 2019 y 2022

En la entrada de hoy voy a explicaros como podéis llevar a cabo la instalación de un servidor SFTP sobre Windows Server 2019 y 2022. Para ello nos apoyaremos en el paquete oficial para Windows OpenSSH.

Instalación OpenSSH

El primer paso a realizar será conectarnos a nuestro servidor con Windows Server 2019/2022, abrir una consola de PowerShell con privilegios de administrador y ejecutar el siguiente comando para instalar OpenSSH desde los repositorios de Microsoft.

PS C:\Windows\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Path          :
Online        : True
RestartNeeded : False

Finalizada la instalación el siguiente paso será iniciar el servicio.

PS C:\Windows\system32> Start-Service sshd

Configurarlo para que se inicie junto con Windows Server.

PS C:\Windows\system32> Set-Service -Name sshd -StartupType 'Automatic'

Por defecto el instalador crea la regla en el Firewall de Windows para permitir el tráfico por el puerto 22 pero para que podáis comprobar que efectivamente ha sido creada os dejo este script el cual en caso de no encontrar dicha regla se encargará de crear la excepción en el Firewall de Windows.

PS C:\Windows\system32> if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
>>     Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
>>     New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
>> } else {
>>     Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
>> }
Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists.

Y listo con estos sencillos pasos ya tendremos listo nuestro servidor SFTP y poder conectarnos a él.

A continuación voy a dejaros varias cosas útiles que puede que necesitéis 😉

Cambio del puerto por defecto

Por defecto, como sabéis, SFTP utiliza el puerto 22 para realizar la conexión pero como buena práctica en materia de seguridad yo os recomendaría que lo cambiarais por otro puerto que no sea el estándar.

Para cambiar el puerto por defecto simplemente tendremos que abrir con un editor de texto el siguiente archivo: C:\ProgramData\ssh\sshd_config, buscar la siguiente línea, des comentarla, especificar el puerto que queramos utilizar y finalmente guardar los cambios.

Abrimos el puerto en el cortafuegos de Windows. Para ello abrimos una consola de PowerShell como administrador y ejecutamos el siguiente comando:

PS C:\Windows\system32> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort numero_puerto_a_abrir -Program "C:\Windows\System32\OpenSSH\sshd.exe"


Name                  : sshd
DisplayName           : OpenSSH SSH Server
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : Se analizó la regla correctamente desde el almacén. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Y ya por último reiniciamos el servicio sshd.

PS C:\Windows\system32> Stop-Service sshd
PS C:\Windows\system32> Start-Service sshd

Permitir el acceso a una único directorio

En algunas ocasiones puede sernos útil que un usuario pueda conectar al servidor pero no queremos que navegue libremente por las carpetas de nuestro Windows y sólo queremos que tenga acceso a una carpeta en concreto, pues bien, voy a explicaros como hacerlo.

Creamos un usuario local de Windows y le damos permisos sobre la carpeta a la que debe poder acceder. Esto no lo explico porque ya estaréis hartos de hacerlo 🙂

Abrimos con un editor de texto el siguiente archivo: C:\ProgramData\ssh\sshd_config

Buscamos el parámetro Subsystem dentro del fichero de configuración y le añadimos el parámetro «d» seguido de la ruta del directorio al que el usuario podrá acceder.

# override default of no subsystems
Subsystem	sftp	sftp-server.exe -d "ruta completa directorio"

Añadimos las siguientes líneas al final del fichero de configuración.

ForceCommand internal-sftp 

ChrootDirectory ruta completa directorio

PermitTunnel no 
AllowAgentForwarding no 
AllowTcpForwarding no
X11Forwarding no 
AllowUsers nombre_del_usuario_que_hemos_creado

Guardamos los cambios.

Reiniciamos el servicio sshd para que se apliquen los cambios.

PS C:\Windows\system32> Stop-Service sshd
PS C:\Windows\system32> Start-Service sshd

Y de esta forma tan sencilla el usuario que hemos creado sólo tendrá acceso al directorio que hemos definido.

Como siempre espero que os haya sido de utilidad.

Entradas relacionadas

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.