Configuración del servidor OpenSSH para Windows Server y Windows

Se aplica a Windows Server 2022, Windows Server 2019, Windows 10 (compilación 1809 y posteriores)

En este artículo se describe la configuración específica de Windows para OpenSSH Server (sshd).

OpenSSH mantiene documentación detallada sobre las opciones de configuración en línea en OpenSSH.com, que no está duplicada en este conjunto de documentación.

Archivos de configuración de OpenSSH

OpenSSH tiene archivos de configuración para la configuración del servidor y del cliente. OpenSSH es de código abierto y se agrega a los sistemas operativos Windows Server y cliente de Windows, a partir de Windows Server 2019 y Windows 10 (compilación 1809). Como resultado, la documentación de código abierto para los archivos de configuración de OpenSSH no se repite aquí. Los archivos de configuración de cliente y se pueden encontrar en la página manual de ssh_config y para los archivos de configuración de OpenSSH Server se pueden encontrar en el manual de la página sshd_config.

Open SSH Server (sshd) lee los datos de configuración de %programdata%\ssh\sshd_config forma predeterminada, o se puede especificar un archivo de configuración diferente a través del lanzamiento sshd.execon el-f parámetro. Si el archivo no está presente, sshd genera uno con la configuración predeterminada cuando se inicia el servicio.

En Windows, el cliente OpenSSH (ssh) lee los datos de configuración de un archivo de configuración en el orden siguiente:

  1. Al iniciar ssh.exe con el parámetro -F, especificando una ruta de acceso a un archivo de configuración y un nombre de entrada de ese archivo.
  2. Archivo de configuración de un usuario en %userprofile%\.ssh\config.
  3. El archivo de configuración de todo el sistema en %programdata%\ssh\ssh_config.

Configuración del shell predeterminado para OpenSSH en Windows

El shell de comandos predeterminado proporciona la experiencia que un usuario ve al conectarse al servidor mediante SSH. La primera ventana predeterminada es el shell de comandos de Windows (cmd.exe). Windows también incluye PowerShell y los shells de comandos de terceros también están disponibles para Windows y se pueden configurar como shell predeterminado para un servidor.

Para establecer el shell de comandos predeterminado, primero confirma que la carpeta de instalación OpenSSH está en la ruta de acceso del sistema. Para Windows, la carpeta de instalación predeterminada es %systemdrive%\Windows\System32\openssh. El siguiente comando muestra la configuración de la ruta de acceso actual y agrega la carpeta de instalación predeterminada de OpenSSH a ella.

Shell de comandos Comando que se va a usar
Get-Help path
PowerShell $env:path

La configuración del shell ssh predeterminado se realiza en el Registro de Windows agregando la ruta de acceso completa al ejecutable del shell a HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSHen el valor de cadenaDefaultShell.

Como ejemplo, el siguiente comando PowerShell elevado establece que el shell predeterminado sea powershell.exe:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Configuraciones de Windows en sshd_config

En Windows, sshd lee los datos de configuración de %programdata%\ssh\sshd_config de forma predeterminada, o se puede especificar un archivo de configuración diferente mediante el lanzamientosshd.exe con el parámetro-f. Si el archivo no está presente, sshd genera uno con la configuración predeterminada cuando se inicia el servicio.

Los elementos que se enumeran a continuación proporcionan una configuración específica de Windows a través de entradas en sshd_config. Hay otros opciones de configuración posibles que no se aparecen aquí, ya que se tratan en detalle en la documentación Win32 OpenSSH en línea.

Sugerencia

El servidor OpenSSH (sshd) lee el archivo de configuración cuando se inicia el servicio. Cualquier cambio en el archivo de configuración requiere reiniciar el servicio.

AllowGroups, AllowUsers, DenyGroups, DenyUsers

Puede controlar qué usuarios y grupos se pueden conectar al servidor mediante las directivas AllowGroups, AllowUsers, DenyGroups y DenyUsers. Las directivas allow/deny se procesan en el orden siguiente: DenyUsers, AllowUsers, DenyGroups y, por último, AllowGroups. Todos los nombres de cuenta deben especificarse en minúsculas. Para obtener más información sobre PATTERNS y comodín en la ssh_config, consulte la página manual de sshd_config OpenBSD.

Al configurar reglas basadas en grupos o usuarios con un usuario o grupo de dominio, usa el formato siguiente: user?domain*. Windows permite varios formatos para especificar entidades de seguridad de dominio, pero muchos entran en conflicto con patrones estándar de Linux. Por ese motivo, se agrega * para cubrir los nombres de dominio completos. Además, este enfoque usa "?", en lugar de @, para evitar conflictos con el formato username@host.

Los usuarios y grupos del grupo de trabajo y las cuentas conectadas a Internet siempre se resuelven en el nombre de cuenta local (sin la parte del dominio, de forma similar a los nombres estándar de UNIX). Los usuarios y grupos de dominio se resuelven estrictamente en el formato NameSamCompatible: nombre_corto_dominio\nombre_usuario. Todas las reglas de configuración basadas en usuarios o grupos deben usar este formato.

El siguiente ejemplo deniega contoso\admin desde el host 192.168.2.23, y bloquea todos los usuarios del dominio contoso. Además, permite a los usuarios que son miembros de los grupos contoso\sshusers y contoso\serveroperators.

DenyUsers contoso\admin@192.168.2.23
DenyUsers contoso\*
AllowGroups contoso\sshusers contoso\serveroperators

En el ejemplo siguiente se permite que los usuarios locales del usuario inicien sesión desde el host 192.168.2.23 y permiten a los miembros del grupo sshusers.

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

AuthenticationMethods

Para Windows OpenSSH, los únicos métodos de autenticación disponibles son password y publickey.

Importante

Actualmente no se admite la autenticación mediante una cuenta de Microsoft Entra.

AuthorizedKeysFile

El valor predeterminado es .ssh/authorized_keys. Si la ruta de acceso no es absoluta, se toma en relación con el directorio principal del usuario (o la ruta de acceso de la imagen de perfil), por ejemplo, C:\Users\username. Si el usuario pertenece al grupo de administradores, se usa en su lugar %programdata%/ssh/administrators_authorized_keys.

Sugerencia

El archivo administrators_authorized_keys solo debe tener entradas de permiso para la cuenta NT Authority\SYSTEM y el grupo de seguridad BUILTIN\Administrators. La cuenta NT Authority\SYSTEM debe tener el control total. El grupo de seguridad BUILTIN\Administrators es necesario para que los administradores puedan administrar las claves autorizadas, puede elegir el acceso necesario. Para conceder permisos, puede abrir un símbolo del sistema de PowerShell con privilegios elevados y ejecutar el comando icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F".

ChrootDirectory (compatibilidad agregada en la versión 7.7.0.0)

Esta directiva solo es compatible con las sesiones SFTP. Una sesión remota en cmd.exe no respetaría el ChrootDirectory. Para configurar un servidor de chroot solo para SFTP, establece ForceCommand en internal-sftp. También puedes configurar SCP con chroot si implementas un shell personalizado que solo permita SCP y SFTP.

GSSAPIAuthentication

El argumento GSSAPIAuthentication de configuración especifica si se permite la autenticación de usuario basada en GSSAPI. El valor predeterminado para GSSAPIAuthentication no en.

La autenticación GSSAPI también requiere el uso del modificador -K especificando el nombre de host cuando se utiliza el cliente OpenSSH. Como alternativa, puede crear una entrada correspondiente en la configuración del cliente SSH. En Windows, el cliente OpenSSH lee los datos de configuración de %userprofile%.ssh\config de forma predeterminada.

Puede ver un ejemplo de configuración de cliente OpenSSH de GSSAPI a continuación.

# Specify a set of configuration arguments for a host matching the pattern SERVER01.contoso.com
# Patterns are case sensitive
Host SERVER01.contoso.com
    # Enables GSSAPI authentication
    GSSAPIAuthentication yes
    # Forward (delegate) credentials to the server.
    GSSAPIDelegateCredentials yes

Importante

GSSAPI solo está disponible a partir de Windows Server 2022, Windows 11 y Windows 10 xxxx.

HostKey

Los valores predeterminados son:

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

Si los valores predeterminados no están presentes, sshd los genera automáticamente en un inicio de servicio.

Coincidir con

Coincide con las condiciones con uno o varios criterios. Tras una coincidencia, se aplican los argumentos de configuración posteriores. Coincidencias usa las reglas de patrón que se tratan en la sección AllowGroups, AllowUsers, DenyGroups, DenyUsers. Los nombres de usuario y grupo deben estar en minúsculas.

PermitRootLogin

No se aplica en Windows. Para evitar que los administradores inicien sesión, use administradores con la directiva DenyGroups.

SyslogFacility

Si necesitas un registro basado en archivos, usa LOCAL0. Los registros se generan en %programdata%\ssh\logs. Para cualquier otro valor, incluido el valor predeterminado, AUTH dirige los registros a ETW. Para obtener más información, consulte Instalaciones de registro en Windows.

Argumentos de configuración

El siguiente argumento de configuración está disponible a partir de Windows Server 2022, Windows 11 y Windows 10 xxxx:

  • GSSAPIAuthentication

Los siguientes argumentos de configuración no se encuentran disponibles en la versión de OpenSSH que se incluye en Windows Server y en el cliente de Windows:

  • AcceptEnv
  • AllowStreamLocalForwarding
  • AuthorizedKeysCommand
  • AuthorizedKeysCommandUser
  • AuthorizedPrincipalsCommand
  • AuthorizedPrincipalsCommandUser
  • ExposeAuthInfo
  • GSSAPICleanupCredentials
  • GSSAPIStrictAcceptorCheck
  • HostbasedAcceptedKeyTypes
  • HostbasedAuthentication
  • HostbasedUsesNameFromPacketOnly
  • IgnoreRhosts
  • IgnoreUserKnownHosts
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • KerberosGetAFSToken
  • KerberosOrLocalPasswd
  • KerberosTicketCleanup
  • PermitTunnel
  • PermitUserEnvironment
  • PermitUserRC
  • PidFile
  • PrintLastLog
  • PrintMotd
  • RDomain
  • StreamLocalBindMask
  • StreamLocalBindUnlink
  • StrictModes
  • X11DisplayOffset
  • X11Forwarding
  • X11UseLocalhost
  • XAuthLocation