Configuración de la autenticación de clave pública SSH en Windows
En este artículo, mostraremos cómo configurar la autenticación SSH en Windows usando claves RSA o EdDSA. Veamos cómo generar un par de claves públicas y privadas en Windows y configurar un servidor OpenSSH en Windows 10/11 o Windows Server 2019/2022 para la autenticación basada en claves (sin contraseñas).
La autenticación basada en clave SSH es muy utilizada en el mundo Linux, pero en Windows ha aparecido recientemente. La idea es que la clave pública del cliente se agregue al servidor SSH y cuando un cliente intente conectarse, el servidor verifique si el cliente tiene la clave privada correspondiente. De esta manera, un usuario remoto puede autenticarse en Windows sin ingresar una contraseña.
Generación de un par de claves SSH en Windows
Debe generar dos claves SSH (pública y privada) en la computadora cliente que usará para conectarse al host remoto de Windows que ejecuta OpenSSH. Una clave privada se almacena en el lado del cliente (¡mantén la clave segura y no la compartas con nadie!), y una clave pública se agrega al archivo authorized_keys en el servidor SSH. Para generar claves RSA en un cliente de Windows, debe instalar el cliente OpenSSH.
En Windows 10/11 y Windows Server 2019/2022, el cliente OpenSSH se instala como una función opcional de Windows mediante PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0En versiones anteriores de Windows, puede instalar el puerto Win32-OpenSSH desde GitHub (vea el ejemplo en el artículo sobre cómo configurar un servidor SFTP (SSH FTP) en Windows).
Abra una sesión de PowerShell estándar (no elevada) y genere un par de claves ED25519 con el comando:
ssh-keygen -t ed25519
De forma predeterminada, la herramienta ssh-keygen genera claves RSA 2048. Actualmente, se recomienda usar ED25519 en lugar de claves RSA.
Se le pedirá que proporcione una contraseña para proteger la clave privada. Si especifica la contraseña, deberá ingresarla cada vez que use esta clave para la autenticación SSH. No ingresé una frase de contraseña (no recomendado).
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\myuser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\myuser/.ssh/id_ed25519.
Your public key has been saved in C:\Users\myuser/.ssh/id_ed25519.pub.
The key fingerprint is: SHA256:xxxxxxxx myuser@computername
The key's randomart image is:
+--[ED25519 256]--+
+----[SHA256]-----+
Ssh-keygen creará el directorio .ssh en el perfil de un usuario actual de Windows (
%USERPROFILE%\.ssh) y generar 2 archivos:
id_ed25519- clave privada (si generó una clave RSA, el archivo se llamará
id_rsa)
id_ed25519.pub- clave pública (una clave RSA similar se llama
id_rsa.pub
Una vez que se generan las claves SSH, puede agregar su clave privada al servicio SSH Agent, lo que le permite administrar convenientemente las claves privadas y usarlas para la autenticación.
El servicio SSH Agent puede almacenar sus claves privadas y proporcionarlas en el contexto de seguridad del usuario actual. Ejecute el servicio ssh-agent y configúrelo para que se inicie automáticamente con los comandos de administración del servicio de PowerShell:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agentAgregue su clave privada a la base de datos de ssh-agent:
ssh-add "C:\Users\youruser\.ssh\id_ed25519"Identity added: C:\Users\youruser\.ssh\id_ed25519 (youruser@computername)O como sigue:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsaOpenSSH: configuración de la autenticación basada en clave con clave pública en Windows
Ahora necesita copiar su clave pública SSH al servidor SSH. El servidor SSH de este ejemplo es una máquina remota con Windows 11 que tiene el servicio OpenSSH instalado y configurado.
Puede consultar la guía completa “¿Cómo configurar un servidor OpenSSH en Windows? ”.
Copie el archivo id_ed25519.pub en el directorio .ssh en el perfil del usuario que usará para conectarse al servidor SSH. Por ejemplo, tengo una cuenta de user1 en mi dispositivo Windows 11 remoto, por lo que necesito copiar la clave en C:\Users\user1\.ssh uthorized_keys.
Puede copiar la clave pública al servidor SSH desde el cliente usando SCP:
scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keysPuede agregar varias claves públicas a un solo archivo authorized_keys.
La autenticación de clave pública está deshabilitada de forma predeterminada en el servidor OpenSSH en Windows. Puede verificar esto en el archivo sshd_config. La forma más fácil de obtener una lista de métodos de autenticación permitidos en OpenSSH es usar el siguiente comando de PowerShell (Select-String se usa como un análogo de grep en PowerShell):
cat "C:\ProgramData\ssh\sshd_config"| Select-String "Authentication"#PubkeyAuthentication yes
#HostbasedAuthentication no
#HostbasedAuthentication
PasswordAuthentication yes
#GSSAPIAuthentication noEn este ejemplo, la línea PubkeyAuthentication está comentada, lo que significa que este método de autenticación está deshabilitado. Abra el archivo sshd_config con el bloc de notas y descomente la línea:
Notepad C:\ProgramData\ssh\sshd_configPubkeyAuthentication yesAdemás, deberá deshabilitar la opción StrictModes en el archivo de configuración sshd_config. De manera predeterminada, este modo está habilitado e impide la autenticación basada en claves SSH si las claves públicas y privadas no están debidamente protegidas. Descomentar la línea
#StrictModes yesy cambiarlo a
StrictModes noPara conectarse a un host remoto usando un cliente SSH nativo, use el siguiente comando:
ssh (username)@(SSH server name or IP address)Por ejemplo:
ssh admin@192.168.1.15Significa que desea conectarse a un servidor SSH remoto con la dirección IP 192.168.1.15 en la cuenta user1. El servicio SSH Agent intentará automáticamente usar su clave privada para autenticarse en un host remoto.
Si no desea usar el servicio ssh-agent para administrar las claves SSH, puede especificar la ruta al archivo de clave privada que se usará para la autenticación SSH:
ssh user1@192.168.1.15 -i "C:\Users\youuser\.ssh\id_ed25519"Para conectar el host SSH usando una cuenta de usuario de un dominio de Active Directory, use el siguiente formato:
ssh jsmith@a-d.site@192.168.1.15 -i <private_key_absolute_path>
Al conectarse por primera vez, debe agregar la huella digital de la clave del servidor SSH a la lista de confianza. Escriba sí -> Intro.
The authenticity of host '192.168.1.15 (192.168.1.15)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yesEl registro ETW se usa en Windows OpenSSH para almacenar registros SSH en lugar de archivos de texto sin formato. Puede consultar los registros de autenticación basados en claves SSH en el Visor de eventos de Windows (Registros de aplicaciones y servicios -> OpenSSH -> Operacional).
Si la conexión SSH con la clave privada es exitosa, aparecerá el siguiente evento en el registro de OpenSSH:
EventID 4
sshd: Accepted publickey for locadm from 192.168.15.20 port 55772 ssh2: ED25519 SHA256:xxxxxxxSi no pudo conectarse a su servidor SSH usando su clave privada y todavía se le solicita que ingrese una contraseña, es probable que la cuenta de usuario a la que está tratando de conectarse sea miembro del grupo de administradores locales de Windows (el SID del grupo es
S-1-5-32-544). Lo discutiremos más tarde.
Inicio de sesión de Windows con clave SSH bajo usuario administrativo
OpenSSH utiliza una configuración de autenticación especial basada en claves para las cuentas de usuario administrador en Windows.
Debe usar el archivo C:\ProgramData\ssh\administrators_authorized_keys en lugar de la clave authorized_keys en el perfil de usuario. Agregue su clave SSH pública a este archivo de texto (por razones de seguridad, solo los grupos Administradores y SISTEMA deben tener permiso para leer este archivo).
Puede cambiar los permisos NTFS en un archivo con:
La herramienta icacls:
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"o usando los cmdlets de PowerShell Get-Acl y Set-Acl:
get-acl "$env:programdata\ssh\ssh_host_rsa_key" | set-acl "$env:programdata\ssh\administrators_authorized_keys"
Después de eso, la autenticación de clave SSH funciona incluso si StrictModes está deshabilitado.
Para utilizar el archivo de claves_autorizadas de un perfil de usuario y no mover la información de la clave pública al archivo de claves_autorizadas_administradores, puede comentar una línea en el archivo de configuración de OpenSSH (C:\ProgramData\ssh\sshd_config).
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keysAdemás, puede deshabilitar el inicio de sesión con contraseña SSH en sshd_config:
PasswordAuthentication noNo olvide reiniciar el servicio sshd después de realizar los cambios en el archivo sshd_config.
restart-service sshdSi establece PasswordAuthentication no y configura la autenticación de clave SSH incorrectamente, aparecerá un error al conectarse a través de ssh:
user1@192.168.13.15: Permission denied (publickey,keyboard-interactive).Puede usar la opción PermitRootLogin en OpenSSH en Linux para restringir el inicio de sesión raíz de SSH. Esta directiva no es aplicable en Windows OpenSSH, y debe usar el parámetro DenyGroups para denegar el inicio de sesión ssh en las cuentas de administrador:
DenyGroups AdministratorsEntonces, ha configurado la autenticación SSH en Windows usando un par de claves. Ahora puede usar este método de autenticación para acceder de forma segura a servidores remotos, reenviar puertos automáticamente en el túnel SSH, ejecutar scripts y realizar otras tareas de automatización.













