Cómo habilitar y configurar el servidor SSH en Windows con OpenSSH
El servidor SSH basado en el paquete OpenSSH es parte del sistema operativo en todas las versiones modernas de Windows. En este artículo, le mostraremos cómo instalar y configurar el servidor OpenSSH en Windows 10/11 y Windows Server 2022/2019 y conectarse de forma remota a través de una conexión SSH segura (como en Linux ?).
¿Cómo instalar el servidor OpenSSH en Windows?
El paquete del servidor OpenSSH forma parte de todas las versiones modernas de Windows 10 (a partir de 1803), Windows 11 y Windows Server 2022/2019 como una función bajo demanda (FoD). Para instalar el servidor OpenSSH, abra el indicador elevado de PowerShell y ejecute el comando:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online O usando DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0Si su computadora está conectada directamente a Internet, el paquete OpenSSH.Server se descargará e instalará en Windows.
También puede instalar OpenSSH en Windows 10/11 a través del moderno panel Configuración (Configuración -> Aplicaciones y funciones -> Funciones opcionales -> Agregar una función). Busque Abrir servidor SSH en la lista y haga clic en Instalar.
También puede instalar las herramientas de administración remota del servidor (RSAT) desde aquí.
En equipos en entornos desconectados (fuera de línea), puede instalar OpenSSH Server desde la imagen Feature on Demand ISO (disponible en su cuenta en los sitios web de Microsoft: MSDN o my.visualstudio.com). Descarga la ISO y extrae su contenido a la carpeta E:\FOD (solo puedes extraer el archivo
OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab) e instale la característica de Windows desde el repositorio local:
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source E:\FODUn instalador MSI para OpenSSH para Windows también está disponible en el repositorio oficial de Microsoft en GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Por ejemplo, para Windows 10 x64, debe descargar e instalar el paquete OpenSSH-Win64-v8.9.1.0.msi. El siguiente comando de PowerShell descargará el archivo MSI e instalará el cliente y servidor OpenSSH en su computadora:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msiTambién puede instalar un servidor OpenSSH en versiones anteriores de Windows (Windows 8.1, Windows Server 2016/2012R2/2012). Consulte el ejemplo sobre cómo instalar y configurar Win32-OpenSSH en el artículo “¿Cómo configurar el servidor SFTP (SSH FTP) en Windows? ”.
Para asegurarse de que el servidor OpenSSH se haya instalado, ejecute el comando:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'State : InstalledConfiguración del servidor SSH en Windows
Después de instalar el servidor OpenSSH en Windows, se agregan dos servicios:
-
ssh-agent (agente de autenticación OpenSSH): se puede usar para administrar claves privadas si ha configurado la autenticación de clave SSH;
sshd (Servidor OpenSSH SSH).
Debe cambiar el tipo de inicio del servicio sshd a automático e iniciar el servicio mediante PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshdUse el comando netstat para asegurarse de que el servidor SSH se esté ejecutando y esperando las conexiones en el puerto TCP 22:
netstat -na| find ":22"Asegúrese de que el Firewall de Windows Defender permita conexiones entrantes a Windows a través del puerto TCP 22:
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, EnabledName DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) TrueSi la regla está deshabilitada (Enabled=False) o falta, puede crear una nueva regla de entrada usando el cmdlet New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22De forma predeterminada, los componentes clave de OpenSSH se encuentran en estas carpetas:
-
Ejecutables del servidor OpenSSH:
C:\Windows\System32\OpenSSH\(sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe, etc.)
El archivo sshd_config (creado después del primer inicio del servicio):
C:\ProgramData\sshEl archivo Authorized_keys y las claves se pueden almacenar en la carpeta de perfil de usuario:
%USERPROFILE%\.ssh\
Sshd_config: archivo de configuración del servidor OpenSSH
Puede cambiar la configuración de su servidor OpenSSH en el archivo de configuración:
%programdata%\ssh\sshd_config. Este es un archivo de texto sin formato con un conjunto de directivas. Puede usar cualquier editor de texto para editar:
start-process notepad C:\Programdata\ssh\sshd_configPor ejemplo, para denegar la conexión SSH a una cuenta de usuario de un dominio específico (o a todos los usuarios del dominio especificado), agregue estas directivas al final del archivo:
DenyUsers a-d\admin@192.168.1.10
DenyUsers corp\*Para permitir la conexión SSH solo al grupo de seguridad de dominio específico:
AllowGroups a-d\sshadminsPuede permitir el acceso a un grupo de usuarios local:
AllowGroups sshadminsDe forma predeterminada, todos los usuarios de Windows pueden conectarse a OpenSSH. Las directivas en los archivos sshd_config se procesan en el siguiente orden: DenyUsers, AllowUsers, DenyGroups, AllowGroups.
Puede denegar el inicio de sesión SSH para las cuentas con privilegios de administrador. En este caso, si necesita realizar acciones privilegiadas en su sesión SSH, deberá usar runas.
DenyGroups AdministratorsLas siguientes directivas le permiten acceder a Windows utilizando claves privadas SSH o una contraseña.
PubkeyAuthentication yes
PasswordAuthentication yesPuede cambiar el puerto TCP/22 predeterminado en el que se aceptan las conexiones del servidor OpenSSH en el archivo de configuración sshd_config utilizando la directiva Puerto.
Después de realizar cualquier cambio en el archivo sshd_config, debe reiniciar el servicio sshd
restart-service sshd¿Cómo conectarse a una computadora remota con Windows a través de SSH?
Ahora puede intentar conectarse a su computadora con Windows 10 usando el cliente SSH (estoy usando PuTTY en este ejemplo).
Puede usar el cliente SSH de Windows incorporado para conectarse a un host remoto. Para hacer esto, abra el símbolo del sistema y ejecute el siguiente comando:
ssh max@192.168.13.12En este ejemplo, max es el nombre de usuario en la computadora Windows remota y 192.168.13.12 es la dirección IP o el nombre DNS de la computadora.
Tenga en cuenta que puede usar los siguientes formatos de nombre de usuario cuando se conecta a Windows a través de SSH:
max@server1- usuario local de Windows
max@a-d.site@server1- Usuario de Active Directory o cuenta de Microsoft/Azure (utilice el formato UserPrincipalName)
a-d\max@server1- Formato de nombre NetBIOS
En un dominio de Active Directory, puede usar la autenticación Kerberos en SSH. Para hacer esto, debe habilitar la siguiente directiva en sshd_config:
GSSAPIAuthentication yesAhora puede conectarse de forma transparente a un servidor SSH desde una máquina Windows unida a un dominio con una sesión de usuario de dominio. En este caso, no se solicitará la contraseña del usuario y se realizará la autenticación SSO a través de Kerberos:
ssh -K server1La primera vez que se conecte, se le pedirá que agregue el host a la lista de hosts SSH conocidos (
C:\Users\your_user\.ssh\known_hosts).
Hacer clic
Yese inicie sesión con su cuenta de usuario de Windows.
Si la conexión SSH es exitosa, verá el indicador de shell cmd.exe.
admin@win10pc C:\Users\admin>Puede ejecutar diferentes comandos, scripts y aplicaciones en el símbolo del sistema SSH.
Prefiero trabajar en la consola de PowerShell. Para iniciarlo, ejecuta:
powershell.exePara cambiar el shell cmd.exe predeterminado en OpenSSH a PowerShell, realice cambios en el registro con el siguiente comando de PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -ForceReinicie su conexión SSH y asegúrese de que PowerShell ahora se usa como un shell SSH predeterminado (esto se indica en el mensaje
PS C:\Users\admin>).
El indicador de PowerShell se inició en mi sesión de SSH, donde funcionan las funciones habituales: autocompletado de pestañas, resaltado de sintaxis de PSReadLine, historial de comandos, etc. Si el usuario actual es miembro del grupo de administradores locales, todos los comandos de la sesión se ejecutan elevados incluso si UAC está habilitado.
El servidor OpenSSH en Windows se puede usar en varios escenarios de tunelización SSH.
Comprobación de los registros de conexión SSH en Windows
De manera predeterminada, los registros de conexión del servidor SSH de Windows no se escriben en archivos de texto, sino en un registro de eventos separado a través de Seguimiento de eventos para Windows (ETW). Abra la consola del Visor de eventos (
eventvwr.msc) y vaya a Registros de aplicaciones y servicios -> OpenSSH -> Operativo.
Si se conecta con éxito al servidor SSH usando una contraseña, aparecerá un evento en el registro:
EventID: 4
sshd: Accepted password for root from 192.168.1.53 port 65749 ssh2Si se realizó la autenticación de clave SSH, verá el siguiente evento:
sshd: Accepted publickey for locadm from 192.168.1.53 port 61426
ssh2: ED25519 SHA256:FEHDEC/G42FS23209C2KMb4335923pigN31s3qMK322lGibDSi desea que los registros de conexión SSH se escriban en un archivo de texto local, debe habilitar los siguientes parámetros en el archivo sshd_config:
SyslogFacility LOCAL0
LogLevel INFOReinicie el servicio sshd y asegúrese de que los registros del servidor SSH ahora estén escritos en un archivo de texto sin formato C:\ProgramData\ssh\logs\sshd.log
Puede usar una conexión SSH segura con PSRemoting para administrar computadoras remotas a través de WinRM.















