Búsqueda de sitios web

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.0

Ademá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).

  1. Extraiga el archivo a la carpeta de destino: C:\OpenSSH-Win;

  2. Abra un indicador elevado de PowerShell y cambie a la carpeta OpenSSH:

    Cd C:\OpenSSH-Win
  3. 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);

  4. 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 sshd

Use 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 SSH

Nota. 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=22

Abra 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 no

Conexió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@domain

formato 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-SSH

Para 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-Credential

Puede 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 $usrCreds

Ahora 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" -Recurse

Descargue un archivo desde un servidor SFTP remoto:

Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\PS

Para 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 $SFTPSession

En 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.20

Conéctese usando la clave privada ssh:

sftp -i .ssh/id_rsa user1@192.168.3.20

Listar archivos en un directorio remoto:

pwd

Descargue el archivo desde SFTP a un directorio local en su computadora:

get download_this_file_from_sftp.txt

Cargue un archivo desde su computadora a un servidor SFTP:

put file_to_uplodad.txt

Cerrar la sesión:

exit

Configuració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.

  1. Cree claves SSH en su computadora (cliente SFTP) para el usuario bajo el cual se conectará al servidor:

    ssh-keygen -t ed25519

  2. La 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);

  3. 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

    max1
    C:\Users\max1\.ssh\authorized_keys

    )

Ahora puedes usar el

id_ed25519

archivo 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

Artículos relacionados