Guía completa para usar SSH desde PowerShell: cómo conectar, administrar y automatizar sesiones remotas

  • PowerShell permite conexiones SSH nativas en Windows, Linux y macOS para administrar sistemas remotos de forma segura.
  • La instalación y configuración de OpenSSH es sencilla y permite integrar autenticación por contraseña o clave pública.
  • Los cmdlets de PowerShell soportan sesiones remotas SSH, ejecución de comandos y transferencia de archivos sin depender de software externo.

Como usar SSH desde PowerShell

Hoy en día, la administración remota de sistemas es una necesidad para cualquier administrador de sistemas, desarrollador o entusiasta de la informática que trabaje con diferentes servidores o PCs, ya sean Windows, Linux o incluso macOS. La aparición de PowerShell con soporte nativo para SSH ha supuesto un auténtico revulsivo en la manera de conectar y gestionar equipos de forma segura y eficaz. Si eres de los que todavía piensan que necesitas software externo o que el proceso es complicado, sigue leyendo: este artículo te despejará todas las dudas y te servirá de guía completa para usar SSH desde PowerShell, abarcando instalaciones, comandos, pasos avanzados y consejos prácticos para distintos entornos.

Poder conectarse a través de SSH desde PowerShell no solo permite gestionar servidores sin moverse de la silla, sino que también te ahorra tener que instalar aplicaciones de terceros, brindando una experiencia nativa, segura y multiplataforma. La integración de SSH en PowerShell ha simplificado enormemente las tareas de automatización y administración, tanto en infraestructuras Windows como en entornos mixtos, donde conviven sistemas de diferentes fabricantes.

¿Qué es SSH y por qué usarlo con PowerShell?

SSH (Secure Shell) es un protocolo que permite conectarse de forma cifrada y segura a otros equipos a través de la red. Reemplaza a antiguos protocolos como Telnet, asegurando que cualquier dato enviado (credenciales o comandos) viaja protegido frente a posibles interceptaciones. Desde hace años es el estándar para acceso remoto seguro, especialmente en servidores Linux, pero su uso en Windows ha ido creciendo gracias a la integración de OpenSSH en el propio sistema y en PowerShell.

Con PowerShell, se pueden ejecutar comandos SSH desde la consola de Windows o scripts, gestionar archivos, automatizar tareas y conectar tanto a servidores Windows como Linux o dispositivos de red – todo desde una sola herramienta. Esto lo convierte en una solución muy flexible y potente.

Ventajas de usar SSH desde PowerShell

  • Multiplataforma: Gestiona sistemas Windows, Linux y macOS sin cambiar de aplicación.
  • Automatización sencilla: Integra comandos SSH en tus scripts de PowerShell para tareas recurrentes.
  • Sin software adicional: Olvídate de instalar clientes externos como PuTTY, ya que la funcionalidad viene de serie en Windows 10, 11 y Server 2019 o superior.
  • Seguridad: SSH cifra toda la comunicación y soporta autenticación por contraseña o clave.

Requisitos para usar SSH en PowerShell

Antes de comenzar, asegúrate de cumplir los siguientes requisitos básicos:

  • PowerShell versión 5.1 o superior (recomendable PowerShell 6 o 7 para mayor compatibilidad SSH y funciones avanzadas).
  • Cliente SSH instalado. En Windows 10 desde la versión 1809 y Windows Server 2019, OpenSSH viene preinstalado. Para versiones anteriores, puedes instalarlo manualmente desde las características opcionales de Windows.
  • Servidor SSH activo. El equipo al que quieras conectarte debe tener un servidor SSH en funcionamiento, ya sea un servidor Linux, otro Windows, un macOS o algún dispositivo de red compatible.
  • Permisos adecuados. Debes tener credenciales válidas en el equipo remoto (usuario y contraseña o una clave SSH) y ser preferentemente administrador si vas a instalar o configurar servicios.
  • Acceso a la red y el puerto 22 abierto en el firewall para permitir conexiones SSH.

Instalación y configuración de OpenSSH en Windows

La integración de OpenSSH en Windows es uno de los mayores avances en administración remota con PowerShell. Aquí encontrarás los pasos más importantes para instalarlo y configurarlo correctamente:

1. Comprobar la presencia de OpenSSH

Abre PowerShell como administrador y ejecuta:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Si ves que el estado es «Installed» para OpenSSH.Client o OpenSSH.Server, ya lo tienes disponible. Si indica «NotPresent», tendrás que instalarlo.

2. Instalar el cliente y/o servidor OpenSSH

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

El primero te permite conectar a otros equipos, el segundo permite que otros se conecten a tu PC.

3. Iniciar y configurar el servicio OpenSSH

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

Esto activará el servicio y lo dejará configurado para iniciarse automáticamente con Windows.

4. Configuración del firewall

Asegúrate de que el firewall de Windows permite las conexiones SSH en el puerto 22. Al instalar OpenSSH suele crearse la regla automática, pero para verificarlo puedes usar:

Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP"

Si no existe, puedes añadirla fácilmente:

New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Configurar SSH en Linux, macOS y Windows para sesiones PowerShell remotas

SSH en PowerShell no solo sirve para conexiones a sistemas Linux. Desde PowerShell 6 se puede usar para ejecutar sesiones remotas de PowerShell (PSRemoting) empleando SSH como transporte, permitiendo verdaderas sesiones multiplataforma.

Configuración en Windows

  1. Instala la última versión de PowerShell. Puedes descargarla desde GitHub.
  2. Edita el archivo sshd_config (en $Env:ProgramData\ssh):
    • Activa la autenticación por contraseña:
      PasswordAuthentication yes
    • Añade el subsistema para PowerShell:
      Subsystem powershell C:/progra~1/powershell/7/pwsh.exe -sshs

      Puedes crear un enlace simbólico para facilitar la ruta del ejecutable:

      New-Item -ItemType SymbolicLink -Path 'C:\ProgramData\ssh\' -Name 'pwsh.exe' -Value (Get-Command pwsh.exe).Source
    • Si quieres usar autenticación de claves:
      PubkeyAuthentication yes
  3. Reinicia el servicio sshd:
    Restart-Service sshd
  4. Asegúrate de que la ruta de OpenSSH está en la variable PATH.

Configuración en Linux

  1. Instala PowerShell desde el repositorio oficial ().
  2. Instala el servidor SSH:
    sudo apt install openssh-client
    sudo apt install openssh-server
  3. Edita el archivo /etc/ssh/sshd_config:
    • Asegura la línea:
      PasswordAuthentication yes
    • Añade el subsistema PowerShell:
      Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
    • Para autenticación de clave pública:
      PubkeyAuthentication yes
  4. Reinicia el servicio SSH:
    sudo systemctl restart sshd.service

Configuración en macOS

  1. Instala la última versión de PowerShell.
  2. Activa el acceso remoto (Remote Login) en las preferencias del sistema, sección ‘Sharing’.
  3. Edita /private/etc/ssh/sshd_config y añade:
    • PasswordAuthentication yes
    • Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
    • PubkeyAuthentication yes
  4. Reinicia el servicio SSH:
    sudo launchctl stop com.openssh.sshd
    sudo launchctl start com.openssh.sshd

Conexión y gestión remota con PowerShell y SSH

Existen dos formas principales de usar SSH desde PowerShell:

  • Ejecutar el comando ssh directamente desde la consola, igual que en sistemas Linux o macOS.
  • Utilizar cmdlets específicos de PowerShell para sesiones remotas: New-PSSession, Enter-PSSession, Invoke-Command, los cuales admiten una conexión SSH como transporte, ideal para ejecutar comandos o scripts en otros equipos.

Conexión básica usando el comando ssh

ssh usuario@IP_o_nombre_host

Se te pedirá la contraseña o, si tienes configurada la autenticación de clave pública, la utilizará directamente.

Puedes usar todos los comandos habituales de Linux, y también manipular archivos, reiniciar servicios, etc. Para terminar la sesión usa exit.

Cmdlets de PowerShell con SSH

Desde PowerShell 6 puedes crear sesiones remotas mediante SSH. Ejemplos:

$session = New-PSSession -HostName ServidorRemoto -UserName tuUsuario
Enter-PSSession $session

Para ejecutar un solo comando remoto:

Invoke-Command -Session $session -ScriptBlock { Get-Process }

Para liberar la sesión:

Remove-PSSession $session

Ejemplos prácticos: de Windows a Linux y viceversa

Imagina que tienes un Windows 11 y quieres acceder a tu servidor Ubuntu. Los pasos serían:

  1. Abre PowerShell en Windows.
  2. Escribe:
    ssh tuUsuario@IP_del_Ubuntu
  3. Introduce la contraseña cuando se solicite.
  4. Ya puedes ejecutar comandos en tu servidor remoto.

El proceso es idéntico para conexiones entre Linux y Windows, solo cambiando el usuario y el equipo de destino.

Transferencia de archivos con PowerShell y SSH

Otra utilidad muy práctica es el uso de scp (secure copy), que también está disponible en Windows con OpenSSH y permite transferir archivos entre equipos locales y remotos.

scp archivo.txt usuario@IP:/ruta/destino/

O al revés, descargar desde el servidor remoto:

scp usuario@IP:/ruta/archivo.txt ./

Comandos útiles y equivalencias PowerShell-Linux

  • ls / dir: Muestra el contenido de un directorio
  • cd: Cambia de directorio en el servidor remoto
  • rm / Remove-Item: Borra archivos o carpetas
  • mv / Move-Item: Mueve o renombra archivos
  • touch / New-Item: Crea archivos
  • useradd: Añade usuarios (en Linux)
  • scp: Copia archivos entre equipos

Gestión de claves SSH para autenticación avanzada

Usar contraseña está bien para empezar, pero lo más seguro y práctico es la autenticación basada en clave pública:

    1. Genera una clave SSH:
      ssh-keygen
    2. Agrega la clave pública al servidor remoto: Copia el contenido de id_rsa.pub (Linux) o el archivo generado en Windows a ~/.ssh/authorized_keys en el servidor de destino.
    3. Opcionalmente, usa ssh-agent para gestionar varias claves:
ssh-add ruta_clave_privada

Así, solo tendrás que introducir la clave la primera vez, o ni siquiera, si está bien configurado el ssh-agent.

Limitaciones y consideraciones importantes

  • El comando sudo no está disponible directamente en sesiones remotas PowerShell-SSH en Linux. Para ejecutar comandos privilegiados deberás buscar alternativas o métodos específicos.
  • No se cargan los perfiles ($PROFILE) de PowerShell automáticamente durante sesiones SSH. Si necesitas usar uno, deberás cargarlo manualmente después de iniciar la sesión remota.
  • Limitaciones multiplataforma: Algunas funciones avanzadas (como la administración de puntos de conexión o JEA) solo están soportadas por WinRM, aunque se espera mayor soporte futuro bajo SSH.
  • Segundo salto de sesiones remotas: Antes de PowerShell 7.1, no era posible crear una segunda sesión remota desde una ya activa usando SSH, pero a partir de esa versión sí se permite, aunque con ciertas restricciones.

Uso especializado: switches, dispositivos de red y REST API

PowerShell puede conectarse vía SSH a dispositivos de red como switches para ejecutar comandos, aunque depende de las capacidades del firmware y la compatibilidad con el protocolo SSH. Para tareas más avanzadas, algunos fabricantes de hardware ofrecen APIs REST que pueden ser gestionadas también desde PowerShell.

En muchos casos, el método directo con SSH es la opción más universal, sencilla y compatible para operaciones básicas en el equipo remoto.

¿Alternativas a OpenSSH? PuTTY y otros clientes

Aunque OpenSSH ahora viene integrado en Windows, herramientas como PuTTY siguen siendo opciones válidas, especialmente si necesitas una interfaz gráfica o gestionar conexiones guardadas con diferentes configuraciones y claves. Sin embargo, la integración directa con PowerShell y scripts hace que OpenSSH sea el camino preferido para la mayoría de usuarios y tareas de automatización.

¿Y si trabajo con GitHub o plataformas similares?

Configurar claves SSH en PowerShell es esencial si usas plataformas como GitHub. El procedimiento consiste en generar la clave, añadirla al agente y copiar la pública en la configuración de tu perfil de GitHub. Una vez hecho esto, puedes trabajar con tus repositorios de forma segura y sin introducir la contraseña en cada operación.

Dominar SSH en PowerShell abre un mundo de posibilidades para la administración y automatización de tareas, tanto si gestionas servidores Windows, Linux o dispositivos de red. Gracias a la integración nativa de OpenSSH y la potencia de los cmdlets de PowerShell, controlar sistemas remotos es cuestión de minutos. Desde la instalación y configuración inicial, hasta la transferencia de archivos y ejecución de comandos complejos, cualquier usuario puede convertir su PC en un auténtico centro de operaciones multiplataforma, seguro y versátil.

WSL 2 (Windows Subsystem for Linux 2): Todo sobre el Subsistema de Windows para Linux, ventajas y cómo sacarle partido

Deja un comentario