Configuración del servidor SFTP (SSH FTP) en Windows
Puede usar el paquete OpenSSH incorporado en Windows para habilitar fácilmente transferencias seguras de archivos entre el cliente y el servidor de Windows usando el protocolo SFTP (FTP seguro). En este artículo, mostraremos cómo instalar y configurar un servidor SFTP en Windows 10 o Windows Server 2022/2019/2016/2012R2.
SFTP (Secure File Transfer Protocol, Secure FTP o SSH FTP) es la extensión del protocolo SSH, que es el estándar en el mundo de los sistemas UNIX/Linux. Desde el punto de vista del usuario, es similar a FTP, pero en realidad es un protocolo completamente diferente que no tiene nada en común con FTP. Los datos entre el cliente y el servidor se transmiten en el puerto 22 a través de un túnel SSH (puerto TCP 22).
Las principales ventajas de SFTP:
Los archivos y comandos se transfieren dentro de una sesión SSH segura;
Se utiliza una conexión para enviar archivos y comandos;
-
Se admiten enlaces simbólicos, interrumpir/reanudar la transferencia, funciones de eliminación de archivos, etc.;
La conexión SFTP es mucho más rápida y confiable en enlaces WAN donde el FTP es lento o intermitente;
Posibilidad de autenticarse mediante claves SSH.
No confunda los protocolos SFTP y FTPS. FTPS es esencialmente un simple FTP con un certificado SSL, y SFTP es el protocolo para transferir los datos y comandos FTP dentro de la sesión SSH.
El puerto win32 de OpenSSH (Win32-OpenSSH) está integrado en todas las versiones modernas de Windows de forma predeterminada. Puede usarlo para configurar un servidor SFTP seguro en lugar de usar productos de terceros como Core FTP, FileZilla, CYGWIN, FTP Shell, IPSwitch, etc.
¿Cómo instalar OpenSSH en Windows?
El paquete OpenSSH es parte del sistema operativo en las versiones modernas de Windows 10 (a partir de 1803), Windows 11 y Windows Server 2022/2019 como una función bajo demanda (como RSAT).
En estas versiones de Windows, puede instalar el servidor OpenSSH mediante PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server*O usando DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0Además, puede instalar el servidor OpenSSH desde la GUI de Windows 10 (Configuración -> Aplicaciones -> Funciones opcionales -> Agregar una función -> Abrir servidor SSH -> Instalar).
Para verificar si un paquete está instalado:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'Los ejecutables de OpenSSH se encuentran en el directorio:
c:\windows\system32\OpenSSH\;
El archivo de configuración sshd_config se encuentra en
C:\ProgramData\ssh(este directorio se crea después del primer inicio del servicio sshd);
Archivo de registro:
c:\windows\system32\OpenSSH\logs\sshd.log;
El archivo Authorized_keys y las claves se almacenan en un directorio:
%USERPROFILE%\.ssh\
En las compilaciones anteriores de Windows 10, Windows 8.1 y Windows Server 2016/2012 R2, deberá descargar Win32-OpenSSH para Windows desde GitHub e instalarlo manualmente (https://github.com/PowerShell/Win32-OpenSSH/releases). Necesitamos una versión para Windows x64: OpenSSH-Win64.zip (4,15 MB).
Extraiga el archivo a la carpeta de destino: C:\OpenSSH-Win;
-
Abra un indicador elevado de PowerShell y cambie a la carpeta OpenSSH:
Cd C:\OpenSSH-Win Agregue la ruta al directorio OpenSSH a la variable de entorno Path (Propiedades del sistema -> pestaña Avanzado -> Variables de entorno -> Seleccione y edite la variable de sistema Path -> Agregue la ruta a la carpeta OpenSSH);
Instale el servidor OpenSSH:
.\install-sshd.ps1(debería aparecer un mensaje verde "sshd y ssh-agent servicios instalados correctamente ”);
Si la política de ejecución de PowerShell bloquea la ejecución de secuencias de comandos de PowerShell en su computadora, puede ejecutar la secuencia de comandos con este comando:powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1¿Cómo configurar el servidor SFTP en Windows usando OpenSSH?
Ahora necesita configurar OpenSSH en Windows para el modo SFTP.
Habilite el inicio automático para el servicio SSHD e inícielo con los siguientes comandos de administración de servicios de PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'Start-Service sshdUse PowerShell para abrir el puerto TCP 22 en el Firewall de Windows para el tráfico SSH entrante:
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSHNota. El comando anterior no funcionará en versiones antiguas de escritorio de Windows. En este caso, se utiliza otro comando:
netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22Abra el archivo de configuración SSHD (
C:\ProgramData\SSH\sshd_config) en cualquier editor de texto. Busque y verifique el valor de la directiva Subsystem sftp. El archivo sftp-server.exe debe especificarse aquí.
Además, puede configurar los siguientes parámetros en el archivo de configuración sshd_config:
# only allow users in this domain group to connect to OpenSSH AllowGroups corp\sftp_users # enable password authentication (SSH keys cannot be used) AuthenticationMethods password #default (chrooot) directory for SFTP users (by default, the user connects to the directory with his profile in the C:\users\username folder) ChrootDirectory C:\SFTP ForceCommand internal-sftp #You can set an individual chrootdirectory for each user: Match User abrown ChrootDirectory c:\SFTP\abrown ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no Match User jsmith ChrootDirectory c:\SFTP\jsmith ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding noConexión al servidor SFTP mediante WinSCP o PowerShell
Ahora puede conectarse a su servidor Windows SSH utilizando el protocolo SFTP. A continuación, le mostraremos cómo conectarse a un servidor SFTP mediante el cliente gratuito WinSCP, la consola PowerShell y la herramienta sftp.exe integrada.
En la ventana de configuración de la conexión, seleccione el SFTP como protocolo de transferencia de archivos, especifique el nombre del servidor y las credenciales de la cuenta de Windows (utilice el
user@domainformato para usuarios de dominio), que se utiliza para la conexión (también es posible configurar la autenticación de clave pública).
Cuando intenta conectarse por primera vez, aparece la siguiente notificación de la clave de host que no se encuentra en el caché local.
Si todo está configurado correctamente, un cliente debe conectarse al servidor SFTP y mostrar la lista de archivos en el directorio chroot de inicio del usuario (por defecto, es el directorio de perfil del usuario).
Usando la interfaz familiar del administrador de archivos (como Total Commander), puede copiar archivos entre el servidor y el cliente usando el protocolo SFTP seguro.
Puede usar el módulo Posh-SSH para conectarse a un servidor SFTP desde PowerShell. Puede descargar e instalar el módulo desde la Galería de PowerShell o sin conexión:
Install-Module -Name Posh-SSHPara conectarse al servidor SFTP con una contraseña, debe obtener el nombre de usuario y la contraseña a través de Get-Credential:
$usrCreds= Get-CredentialPuede usar el módulo SecretManagement de PowerShell para recuperar de forma segura una contraseña guardada desde un administrador de credenciales de Windows o una bóveda externa (KeePass, HashiCorp Vault, Azure Key Vault, Bitwarden, etc.).
Ahora puede conectarse a su servidor SFTP:
$SFTPSession = New-SFTPSession -ComputerName 192.168.3.20 -Credential $usrCredsAhora puede listar los archivos en el directorio remoto en el servidor SFTP. En este ejemplo, obtendré una lista de archivos en el Escritorio del usuario (el perfil del usuario será la carpeta del usuario raíz/chroot en este caso)
Get-SFTPChildItem -SFTPSession $SFTPSession -Path "desktop" -RecurseDescargue un archivo desde un servidor SFTP remoto:
Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\PSPara cargar un archivo desde su computadora a un host SFTP remoto:
Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\PS\mytestfile.log -Destination "desktop"Cierre la sesión SFTP:
Remove-SFTPSession -SFTPSession $SFTPSessionEn Windows, puede usar el comando de consola integrado sftp.exe (instalado con el cliente OpenSSH) para conectarse a un servidor SFTP.
Conéctese al servidor sftp:
sftp user1@192.168.3.20Conéctese usando la clave privada ssh:
sftp -i .ssh/id_rsa user1@192.168.3.20Listar archivos en un directorio remoto:
pwdDescargue el archivo desde SFTP a un directorio local en su computadora:
get download_this_file_from_sftp.txtCargue un archivo desde su computadora a un servidor SFTP:
put file_to_uplodad.txtCerrar la sesión:
exitConfiguración de autenticación de clave pública SFTP
Puede habilitar la autenticación basada en clave SFTP en Windows. En este caso, puede autenticarse en el servidor SFTP sin ingresar una contraseña.
Para obtener más información sobre cómo configurar la autenticación basada en clave SSH, consulte este artículo.
Cree claves SSH en su computadora (cliente SFTP) para el usuario bajo el cual se conectará al servidor:
ssh-keygen -t ed25519La herramienta ssh-keygen generará dos archivos id_ed25519 (clave privada para la computadora del cliente) y id_ed25519.pub (clave pública para el servidor SFTP);
Ahora debe agregar su clave SSH al servidor de Windows (host SFTP). Copie el archivo id_ed25519.pub (o id_rsa.pub según el tipo de clave) en el directorio .ssh del perfil de usuario en el que se conectará al SFTP. Cambie el nombre del archivo a authorized_keys (por ejemplo, el siguiente archivo de clave se usa para el usuario
max1C:\Users\max1\.ssh\authorized_keys)
Ahora puedes usar el
id_ed25519archivo para autenticarse en el servidor SFTP. Puede configurar su clave en la configuración de WinSCP (Avanzado -> a la configuración de conexión SSH> Página de autenticación -> Archivo de clave privada).
Si desea utilizar una clave SSH al conectarse a SFTP desde PowerShell, utilice el siguiente comando:
New-SFTPSession -ComputerName 192.168.3.20 -Credential remoteuser1 -KeyFile C:\Users\max1\.ssh\id_ed25519" -Verbose












