SSH y PowerShell: Configurar el cliente SSH en Windows

Una vez, estabas limitado en el tipo de computadoras a las que podías conectarte con Windows PowerShell mediante PowerShell Remoting. Dado que PowerShell Remoting solo admitía el proveedor WsMan, tus posibilidades de conectarte a computadoras que ejecutan Linux, por ejemplo, eran nulas. Sin embargo, en 2015, Microsoft introdujo el soporte para SSH en Windows, brindando un gran potencial y finalmente permitiéndote usar SSH y PowerShell juntos.

En este artículo, vamos a sumergirnos y ver cómo configurar el cliente SSH de Windows y cómo puedes aprovechar SSH y PowerShell Remoting.

Esta publicación sobre SSH y PowerShell es parte de la serie de blogs #PS7Now. Asegúrate de revisar a todos los demás colaboradores en esta serie al final de esta publicación.

Antes de comenzar

Este artículo será un tutorial paso a paso. Si tienes la intención de seguirlo, asegúrate de cumplir con los siguientes requisitos previos:

  • Windows 10: Todos los ejemplos se realizarán en Windows 10 Build 1903. El ejemplo estará en el mismo dominio que el servidor remoto de Windows.
  • PowerShell v6+ instalado en Windows 10: Todos los ejemplos utilizarán PowerShell 7 RC2.
  • A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
  • Puerto TCP 22 disponible en el servidor remoto

Configuración del Cliente SSH (Windows 10)

Antes de abrir una consola de PowerShell, primero deberá realizar algunas tareas únicas para hacer que SSH y PowerShell funcionen juntos y asegurarse de que Windows 10 pueda conectarse a un servidor SSH remoto.

Añadir la carpeta OpenSSH al variable de entorno PATH

OpenSSH viene preinstalado en Windows 10, pero a veces necesita un poco de ayuda para trabajar con Remoting de PowerShell. Si ya ha intentado usar Enter-PSSession, por ejemplo, para conectarse a un sistema SSH remoto y se encontró con el error a continuación, debe asegurarse de que la ruta al ejecutable de OpenSSH (ssh.exe) en el variable de entorno PATH.

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

Para agregar la ruta de la carpeta OpenSSH a la variable de entorno PATH, haz clic en el botón Inicio y busca configuración avanzada del sistema, luego haz clic en Ver configuración avanzada del sistema como se muestra a continuación.

Adding OpenSSH folder path

Cuando aparezca la ventana Propiedades del sistema, haz clic en el botón Variables de entorno.

Environment Variables in System Properties

En la ventana Variables de entorno, bajo Variables del sistema, selecciona Path y haz clic en Editar.

System Variables in the Environment Variables

En la ventana Editar variable de entorno, haz clic en Nuevo y luego ingresa la ruta donde se encuentra el ejecutable ssh.exe. Para este tutorial, la ruta es C:\Program Files\OpenSSH, como se muestra a continuación. Una vez ingresado, haz clic en Aceptar dos veces para guardar el nuevo valor.

Editing Environment Variable

Especificar el Subsistema SSH

Ahora deberás especificar el subsistema SSH para que PowerShell lo llame al conectar a través de SSH en el servidor remoto de Windows. Si no le dices a PowerShell qué subsistema usar, inevitablemente obtendrás el siguiente error:

Enter-PSSession: El proceso en segundo plano informó un error con el siguiente mensaje: La sesión del cliente SSH ha finalizado con el mensaje de error: solicitud de subsistema fallida en el canal 0.

Ten en cuenta que si no te estás conectando a una máquina con Windows Server, no será necesario realizar estos pasos.

En el servidor remoto de Windows, abre el archivo C:\ProgramData\ssh\ssh_config. Desplázate hacia abajo hasta la sección override default of no subsystems del archivo ssh_config. La sección se verá como en la captura de pantalla a continuación.

Override Default of no Subsystems

Debajo de la línea existente de Subsystem, agrega el subsistema PowerShell usando la línea siguiente:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Ahora guarda el archivo ssh_config y reinicia el servicio de Windows sshd en el servidor remoto de Windows como se muestra a continuación.

Get-Service -Name sshd | Restart-Service

Una vez que el servicio se reinicie, ahora deberías poder conectarte a través de SSH y PowerShell.

Conexión mediante PowerShell y SSH

Ahora que la configuración está completa, es hora de probar el Remoting de PowerShell.

Primero, intenta ingresar a una sesión interactiva usando el cmdlet Enter-PSSession. A diferencia de lo que podrías estar acostumbrado, no utilizarás el parámetro ComputerName. En su lugar, utilizarás el parámetro HostName para especificar el equipo remoto.

Por defecto, el Remoting de PowerShell todavía utiliza WsMan. Para anular el valor predeterminado, utiliza el parámetro SSHTransport para indicar que te gustaría conectarte a través de SSH y PowerShell.

Cuando intentes conectarte por primera vez con un nombre de usuario y contraseña, deberás crear una clave privada SSH. Para hacerlo, se te pedirá como se muestra a continuación. Cuando se te solicite, escribe ‘y’ para aceptar.

Creating SSH Private Key

Luego se te pedirá la contraseña del usuario con el que iniciaste sesión actualmente.

Tenga en cuenta que en este ejemplo, el cliente de Windows 10 y el servidor SSH de Windows Server están en el mismo dominio de Active Directory. De forma predeterminada, el Remoting de PowerShell intentará autenticarse con el usuario que ha iniciado sesión. También puede usar el parámetro Credential para especificar un nombre de usuario y una contraseña diferentes.

Después de proporcionar la contraseña, debería encontrarse en un prompt familiar de Remoting de PowerShell.

Powershell Remoting Prompt

Ahora salga de la sesión con exit y luego pruebe con New-PSSession. Observe que a continuación, utilizando los mismos parámetros HostName y SSHTransport como antes, el Transport ahora aparece como SSH.

Todavía es posible utilizar WsMan como protocolo de transporte también usando el parámetro ComputerName sin necesidad de utilizar el parámetro SSHTransport.

No es necesario usar un nombre de usuario y una contraseña para SSH. En su lugar, podría usar un archivo de clave privada y utilizar el parámetro KeyFilePath para proporcionar la ubicación.

New PSSession Showing up SSH

¡No olvide limpiar sus sesiones abiertas con Get-PSSession | Remove-PSSession!

Resumen

Ahora debería saber cómo configurar tanto Windows 10 como Windows Server para usar SSH con Remoting de PowerShell. Una vez configurado, la única diferencia entre utilizar WsMan como protocolo de transporte y SSH son un par de parámetros.

Si deseas aprender más sobre PowerShell y SSH, asegúrate de consultar el artículo de documentación de Microsoft sobre Remoting de PowerShell sobre SSH.

#ContribuyentesPS7Ahora

Esta publicación formó parte de una serie sobre PowerShell 7 realizada por los excelentes colaboradores que ves a continuación. ¡Asegúrate de consultar sus publicaciones y ver qué están haciendo en sus blogs!

Author Twitter Blog
Josh King @WindosNZ https://toastit.dev/
Adam Bertram @adbertram https://adamtheautomator.com/
Jonathan Medd @jonathanmedd
Thomas Lee @doctordns https://tfl09.blogspot.com/
Prateek Singh @singhprateik https://ridicurious.com
Dave Carroll @thedavecarroll https://powershell.anovelidea.org/
Dan Franciscus @dan_franciscus https://winsysblog.com/
Jeff Hicks @jeffhicks https://jdhitsolutions.com
Josh Duffney @joshduffney http://duffney.io/
Mike Kanakos @MikeKanakos https://www.networkadm.in/
Tommy Maynard @thetommymaynard https://tommymaynard.com//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/