Windows Server 2022 incluye OpenSSH Server como característica opcional: sin instaladores de terceros y actualizado por Windows Update. Una vez activo, puedes ejecutar PowerShell por SSH, copiar archivos con scp y apuntar scripts o CI al servidor como a cualquier máquina Linux.
Todo lo de abajo se hizo en nuestra imagen de Windows Server 2022, en un PowerShell con permisos de administrador por RDP (cómo conectarte).
Primero, la red. En un plan Windows con NAT la única redirección de entrada va a RDP, así que SSH no es accesible desde internet. Para SSH desde fuera necesitas un plan con IPv4 propia, como Windows Small-IP. Con el puerto accesible, los pasos llevan unos cinco minutos.
1. Instala OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
El cliente ya viene instalado; el servidor aparece como NotPresent hasta que lo añades. En nuestro servidor la instalación tardó 28 segundos.
2. Arráncalo y haz que arranque con el sistema
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Al instalar la característica se crea la regla de firewall OpenSSH-Server-In-TCP (puerto 22, entrada, permitida), así que no hace falta añadir una.
3. Pon PowerShell como shell predeterminada
Por defecto, una sesión SSH cae en cmd.exe. Cámbiala a PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Las conexiones nuevas reciben PowerShell 5.1 al momento; no hace falta reiniciar.
4. Añade tu clave para Administrator: el archivo en el que tropieza todo el mundo
Esta es la primera trampa de Windows. Para las cuentas del grupo Administrators, sshd no lee C:\Users\<name>\.ssh\authorized_keys. Lee un archivo compartido, C:\ProgramData\ssh\administrators_authorized_keys, y solo si nadie salvo Administrators y SYSTEM puede escribir en él:
$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
-Encoding ascii también importa. En nuestra prueba, la misma clave guardada con Out-File (UTF-16, lo predeterminado en PowerShell 5.1) se rechazó con Permission denied (publickey). Desde tu equipo:
ssh Administrator@YOUR.SERVER.IP
Deberías obtener un prompt de PowerShell sin contraseña. Para usuarios que no son administradores funciona el habitual C:\Users\<name>\.ssh\authorized_keys.
5. Desactiva el acceso por contraseña: la segunda trampa
El cambio obvio, PasswordAuthentication no, no basta en esta versión. OpenSSH 8.1 sigue ofreciendo keyboard-interactive, que pide la misma contraseña de Windows. En nuestra prueba, un acceso sin clave seguía mostrando keyboard-interactive hasta que lo desactivamos también. Además, el ajuste debe ir antes del bloque Match Group administrators al final del archivo, o solo se aplica a los administradores. Esto coloca ambas líneas al principio:
$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd
Mantén abierta tu sesión SSH actual y prueba desde una segunda terminal. Un intento solo con contraseña debería recibir ahora:
Permission denied (publickey).
Ese fue el resultado en nuestra prueba tanto para Administrator como para un usuario normal, mientras el acceso con clave seguía funcionando.
Qué puedes hacer con esto
- Ejecutar un comando desde cualquier sitio:
ssh Administrator@IP 'Get-Service sshd'. - Copiar archivos:
scp .\app.zip Administrator@IP:C:/apps/. - Restringir el puerto a tu dirección con el mismo método que para RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Qué plan elegir
SSH desde fuera necesita una IPv4 pública: Windows Small-IP (4 vCPU, 4 GB, 50 GB) cuesta $28/mes y Windows Medium-IP (6 vCPU, 6 GB) $36/mes. Windows es Server 2022 con tu propia licencia (BYOL explicado). Los cuatro planes están en la página de Windows VPS. Para que un programa siga funcionando tras desconectarte, consulta ejecutar un script 24/7 en Windows Server.
Comentarios
Aún no hay comentarios. Sé el primero.