Poder conectarse por SSH directamente desde PowerShell ha dejado de ser una tarea reservada a gurús de la administración. Hoy en día cualquier usuario de Windows puede acceder, administrar servidores e incluso automatizar tareas a través de una terminal SSH gracias a las integraciones nativas de Windows 10 y posteriores. El camino para hacerlo no solo es más sencillo que nunca, sino que además se ha ido puliendo en estabilidad y seguridad, siendo ya una alternativa robusta a los clásicos clientes externos.
Si alguna vez has necesitado gestionar un sistema remoto, copiar archivos, revisar logs o ejecutar comandos en un servidor Linux o Windows sin moverte de tu escritorio, esta guía detallada te va a servir de referencia. Aprenderás desde los requisitos, instalación y configuración de OpenSSH en diferentes plataformas, hasta ejemplos prácticos tanto con los comandos básicos como con funcionalidades avanzadas de PowerShell SSH para sacar el máximo partido a la administración remota.
¿Qué es SSH y por qué usarlo desde PowerShell?
SSH (Secure Shell) es un protocolo de comunicación segura que permite acceder y gestionar sistemas remotos mediante una terminal. Su mayor ventaja respecto a otros protocolos como Telnet es el cifrado extremo a extremo, lo que garantiza que toda la información, incluidos usuarios y contraseñas, viajen totalmente protegidos.
PowerShell, por su parte, es la consola de comandos avanzada de Windows, utilizada tanto para tareas de usuario como de administración. Desde hace unos años, Windows integra un cliente SSH nativo, permitiendo aprovechar toda la potencia de SSH directamente desde PowerShell, facilitando la administración de sistemas Linux, Windows y otros dispositivos remotos de forma sencilla y segura.
Requisitos previos para usar SSH desde PowerShell
Antes de lanzarte a gestionar sistemas remotos desde PowerShell, es necesario comprobar algunos requisitos básicos en tu equipo y el equipo destino:
- PowerShell actualizado: Es recomendable usar PowerShell 6 o posterior para aprovechar todas las funcionalidades. En Windows 10 y 11 viene preinstalado, pero conviene comprobar la versión con el comando $PSVersionTable.PSVersion.
- OpenSSH Cliente: Necesitas tener instalado el cliente OpenSSH. Desde Windows 10 (compilación 1809) y Windows Server 2019 ya viene incluido como característica opcional, aunque puedes instalarlo manualmente si fuese necesario.
- Servidor SSH habilitado en el equipo remoto: El sistema al que te conectarás debe tener activo el servicio SSH (puede ser una máquina Linux, Windows, dispositivos de red, etc.).
- Acceso de red: El equipo desde el que te conectas debe poder alcanzar la IP o dominio del servidor SSH, y es fundamental que el puerto 22 esté abierto en el firewall.
- Permisos de usuario: Aunque no siempre es imprescindible ser administrador, en muchos escenarios necesitarás permisos elevados para instalar características o acceder a sistemas remotos.
Comprobar la instalación y versión de OpenSSH en Windows
Para verificar si tienes el cliente OpenSSH disponible en tu sistema, abre PowerShell y ejecuta:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Te aparecerá el estado instalado (Installed) o no presente (NotPresent) tanto para el cliente como para el servidor. Si no está instalado, puedes añadirlo con:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Para el servidor en caso de querer habilitar la recepción de conexiones SSH en tu propio equipo:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Una vez instalado, ya podrás utilizar el comando ‘ssh’ directamente en PowerShell o en el Símbolo de sistema.
Configurar y arrancar el servicio SSH en Windows
Si vas a aceptar conexiones SSH en Windows, deberás asegurarte de que el servicio esté iniciado. Para arrancarlo y configurarlo para que se inicie automáticamente cada vez que arranques el sistema, ejecuta:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Es recomendable validar que ya existe una regla de firewall que permita el tráfico entrante por el puerto 22 (SSH):
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."
}
Primeros pasos: conectarse por SSH desde PowerShell
Una vez que tienes todo preparado, puedes iniciar una sesión SSH con un sencillo comando desde PowerShell:
ssh usuario@servidor
Recuerda sustituir ‘usuario’ por tu nombre de usuario en la máquina remota y ‘servidor’ por la IP o nombre DNS. Al ejecutarlo, te pedirá aceptar la clave del host (la primera vez) y la contraseña.
Ejemplo real conectando a un servidor Linux:
ssh root@192.168.1.100
También puedes conectarte a otros sistemas Windows con servidor SSH activo, o a dispositivos de red compatibles.
Parámetros avanzados y autenticación por clave
SSH permite mucha flexibilidad en la forma de autenticarse y en cómo establecer la conexión. Los parámetros más habituales son:
- -i para especificar una clave privada para autenticación sin contraseña:
ssh -i ruta/claves/id_rsa usuario@servidor
- -p para especificar un puerto diferente al 22:
ssh -p 2222 usuario@servidor
- -v para modo detallado, útil para depuración de errores.
En PowerShell puedes usar claves generadas con ssh-keygen y copiarlas al servidor remoto para mayor seguridad y comodidad, evitando contraseñas.
Administrar y automatizar sesiones SSH avanzadas con PowerShell
Más allá del comando básico, PowerShell incorpora cmdlets avanzados para trabajar con sesiones SSH como New-PSSession, Enter-PSSession e Invoke-Command. Esto potencia la administración remota, permitiendo automatizar scripts y tareas de mantenimiento sin necesidad de login manual cada vez.
- New-PSSession permite crear una nueva sesión remota especificando el host, usuario y clave o clave pública.
- Enter-PSSession te permite entrar de forma interactiva en una sesión remota, ejecutando comandos como si estuvieras físicamente en el otro equipo.
- Invoke-Command ejecuta comandos o bloques de scripts en remoto, ideal para administración en masa o tareas automáticas.
Ejemplo para iniciar una sesión:
New-PSSession -HostName 192.168.1.100 -UserName admin
Para entrar en la sesión creada:
Enter-PSSession -Session $session
Puedes transferir archivos, consultar procesos, automatizar tareas y mucho más, todo desde la comodidad de PowerShell.
Configurar el servidor SSH en Linux y macOS para conexiones desde PowerShell
No solo puedes administrar equipos Windows desde PowerShell, sino que también es perfectamente posible acceder a servidores Linux y macOS. En estos equipos, deberás asegurarte de que el servicio OpenSSH esté instalado y activo. Así se hace en Linux (por ejemplo Ubuntu):
sudo apt install openssh-client
sudo apt install openssh-server
Para comprobar que está activo:
sudo systemctl status sshd
En macOS basta con activar el acceso remoto desde ‘Sharing’ – ‘Remote Login’ en la configuración del sistema.
En ambos casos puedes editar el fichero sshd_config para permitir autenticación por contraseña o clave pública, e incluso establecer PowerShell como shell predeterminado.
Comandos SSH útiles desde PowerShell
Una vez conectados, es posible ejecutar una amplia gama de comandos del sistema remoto. Algunos ejemplos útiles para la gestión diaria:
- ls / dir: listan el contenido de un directorio
- cd: cambia de directorio
- touch / New-Item: crea nuevos archivos
- rm / Remove-Item: elimina archivos o carpetas
- mv / Move-Item: mueve o renombra archivos
- scp: transfiere archivos entre cliente y servidor
- useradd: añade usuarios
Estos comandos permiten administración completa, automatización y scripting para tareas repetitivas o en infraestructuras complejas.
Configuración avanzada y personalización de sesiones SSH en PowerShell
PowerShell SSH ofrece muchas opciones avanzadas para personalizar la experiencia y adaptarse a tus necesidades:
- Editar el archivo de configuración en $env:ProgramData\ssh\sshd_config para afinar autenticación, algoritmos, reglas y más.
- Permitir o bloquear acceso por contraseña o clave pública según las necesidades de seguridad.
- Añadir subsistemas como PowerShell para que las sesiones remotas inicien directamente en PowerShell mediante ‘Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo’.
- Reiniciar servicios y ajustar variables de entorno para que todo funcione correctamente.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.