Ejecutar conexiones SSH desde Powershell
Si ya sois de la vieja escuela como yo, seguiréis usando el cliente de Putty para lanzar vuestras conexiones Windows de SSH.
Los sistemas avanzan, y aunque ya había desarrollos hace un tiempo, al final siempre volvía a Putty para poder ejecutar conexiones SSH a mis máquinas Linux.
Si ya querías instalar un servidor SSH en un Windows, había que hacer el “pino-puente”.
El otro día me encontré con un proyecto llamado OpenSSH que lleva unos años desarrollándose pero que parece ya estar muy maduro (aún en fase beta). De hecho está documentado en la web oficial de Microsoft:
Aunque está en fase beta, ya es muy funcional y os lo voy a demostrar.
Prerequisitos OpenSSH para utilizarlo en Powershell
- Un dispositivo que ejecute al menos Windows Server 2019 o Windows 10 (compilación 1809)
- PowerShell 5.1 o posterior
- Una cuenta que es miembro del grupo de administradores
Podemos comprobar todo esto vía comando:
- Versión sistema operativo (yo estoy en Windows 11, así que me es fácil):
1 2 3 4 5 |
PS C:\Users\elblogdenegu> systeminfo Nombre de host: NUCEXTREME9 Nombre del sistema operativo: Microsoft Windows 11 Pro Versión del sistema operativo: 10.0.22621 N/D Compilación 22621 |
- La versión de Powershell la sacamos de:
1 2 3 4 5 6 7 8 9 10 11 12 |
PS C:\Users\elblogdenegu> $PSVersionTable Name Value ---- ----- PSVersion 5.1.22621.2506 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.22621.2506 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 |
- Si queremos saber si un usuario local pertenece al grupo administradores:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
PS C:\Users\elblogdenegu> Get-LocalGroup Name Description ---- ----------- Administradores Los administradores tienen acceso completo y sin restricciones al equi... Administradores de Hyper-V Los miembros de este grupo tienen acceso completo y sin restricciones ... Duplicadores Pueden replicar archivos en un dominio IIS_IUSRS Grupo integrado usado por Internet Information Services. Invitados De forma predeterminada, los invitados tienen el mismo acceso que los ... Lectores del registro de eventos Los miembros de este grupo pueden leer registros de eventos del equipo... Operadores criptográficos Los miembros tienen autorización para realizar operaciones criptográfi... Operadores de asistencia de control de acceso Los miembros de este grupo pueden consultar de forma remota los atribu... Operadores de configuración de red Los miembros en este equipo pueden tener algunos privilegios administr... Operadores de copia de seguridad Los operadores de copia de seguridad pueden invalidar restricciones de... Propietarios del dispositivo Los miembros de este grupo pueden cambiar la configuración de todo el ... System Managed Accounts Group Los miembros de este grupo los administra el sistema. Usuarios Los usuarios no pueden hacer cambios accidentales o intencionados en e... Usuarios avanzados Los usuarios avanzados se incluyen para la compatibilidad con versione... Usuarios COM distribuidos Los miembros pueden iniciar, activar y usar objetos de COM distribuido... Usuarios de administración remota Los miembros de este grupo pueden acceder a los recursos de WMI median... Usuarios de escritorio remoto A los miembros de este grupo se les concede el derecho de iniciar sesi... Usuarios del monitor de sistema Los miembros de este grupo tienen acceso a los datos del contador de r... Usuarios del registro de rendimiento Los miembros de este grupo pueden programar contadores de registro y r... PS C:\Users\eleblogdenegu> Get-LocalGroupMember -Name Administradores ObjectClass Name PrincipalSource ----------- ---- --------------- Usuario NUCEXTREME9\Administrador Local Usuario NUCEXTREME9\raulu MicrosoftAccount |
Instalar OpenSSH en Windows 11
Ahora tocaría instalar el módulo que nos permite crear conexiones SSH. Lo haremos de la siguiente forma.
Abrir un terminal de Powershell como administrador:
Lanzamos el comando de verificación:
1 2 3 4 5 6 7 8 |
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' Name : OpenSSH.Client~~~~0.0.1.0 State : NotPresent Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent |
E instalamos el cliente o servidor:
1 2 3 4 5 |
# Install the OpenSSH Client Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # Install the OpenSSH Server Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 |
Y volvemos a verificar:
1 2 3 4 5 6 7 8 |
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' Name : OpenSSH.Client~~~~0.0.1.0 State : Installed Name : OpenSSH.Server~~~~0.0.1.0 State : NotPresent |
Si instalamos el cliente podremos intentar conectarnos a un equipo mediante el siguiente comando:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
PS C:\WINDOWS\system32> ssh root@minis.negu.local The authenticity of host 'minis.negu.local (192.168.2.169)' can't be established. ED25519 key fingerprint is SHA256:gjcV74glyRDtDsQQx+YQ3S8e8c4rH/P7AYQfhLeY9nw. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'minis.negu.local' (ED25519) to the list of known hosts. root@minis.negu.local's password: Linux minis 6.5.11-4-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.11-4 (2023-11-20T10:19Z) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Dec 16 14:45:44 2023 from 192.168.2.178 root@minis:~# |
Si instalamos el servidor deberemos asegurarnos que el servicio está arrancado y el cortafuegos habilitado para el puerto 22 – SSH:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Start the sshd service Start-Service sshd # OPTIONAL but recommended: Set-Service -Name sshd -StartupType 'Automatic' # Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) { Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..." New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 } else { Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists." } |
Para desinstalar:
1 2 3 4 5 |
# Uninstall the OpenSSH Client Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # Uninstall the OpenSSH Server Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 |
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?