Búsqueda de sitios web

Aproveche SSH y PowerShell para transferir archivos de forma segura ahora


Érase una vez, estaba limitado en el tipo de computadoras a las que podía conectarse con Windows PowerShell mediante PowerShell Remoting. Dado que PowerShell Remoting solo admitía el proveedor WsMan, sus posibilidades de conectarse a computadoras que ejecutan Linux, por ejemplo, eran nulas. Sin embargo, en 2015, Microsoft introdujo soporte para SSH en Windows, lo que generó un gran potencial y finalmente le permitió usar SSH y PowerShell juntos.

En este artículo, profundizaremos y veremos cómo configurar el cliente SSH de Windows y cómo aprovechar SSH y PowerShell Remoting.

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

Antes de que empieces

Este artículo será un tutorial paso a paso. Si tiene la intención de seguir adelante, asegúrese de cumplir con los siguientes requisitos previos:

  • Windows 10: todos los ejemplos utilizarán Windows 10 Build 1903. El ejemplo estará en el mismo dominio que el servidor Windows remoto.
  • PowerShell v6+ instalado en Windows 10: todos los ejemplos utilizarán PowerShell 7 RC2.
  • Un servidor SSH remoto: todos los ejemplos utilizarán una máquina SSH con Windows Server. Si se está conectando a una máquina Linux, puede omitir los pasos de configuración del servidor.
  • Puerto TCP 22 disponible en el servidor remoto

Configuración del cliente SSH (Windows 10)

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

Agregue la carpeta OpenSSH a la variable de entorno PATH

OpenSSH viene preinstalado en Windows 10, pero a veces necesita un poco de ayuda para funcionar con PowerShell Remoting. Si ya intentó utilizar Enter-PSSession, por ejemplo, para conectarse a un sistema SSH remoto y se encontró con el siguiente error, debe asegurarse de que la ruta al ejecutable OpenSSH ( ssh.exe) en la 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, haga clic en el botón Inicio y busque configuración avanzada del sistema y luego haga clic en Ver configuración avanzada del sistema . como se muestra a continuación.

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

En la ventana Variables de entorno, en Variables de sistema, seleccione Ruta y haga clic en Editar.

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

Especificar el subsistema SSH

Ahora deberá especificar el subsistema SSH al que PowerShell llamará cuando se conecte a través de SSH en el servidor Windows remoto. Si no le dice a PowerShell qué subsistema usar, inevitablemente obtendrá el siguiente error:

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

Tenga en cuenta que si no se está conectando a una máquina con Windows Server, no necesitará realizar estos pasos.

En el servidor Windows remoto, abra el archivo C:\ProgramData\ssh\ssh_config. Desplácese hacia abajo hasta la sección anular el valor predeterminado sin subsistemas del archivo ssh_config. La sección se verá como la captura de pantalla a continuación.

Debajo de la línea Subsistema existente, agregue el subsistema PowerShell usando la siguiente línea:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Ahora guarde el archivo ssh_config y reinicie 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, debería poder conectarse a través de SSH y PowerShell.

Conexión a través de PowerShell y SSH

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

Primero, intente ingresar a una sesión interactiva utilizando el cmdlet Enter-PSSession. A diferencia de lo que puede estar acostumbrado, no utilizará el parámetro ComputerName. En su lugar, utilizará el parámetro HostName para especificar la computadora remota.

De forma predeterminada, PowerShell Remoting todavía usa WsMan. Para anular el valor predeterminado, utilice el parámetro SSHTransport para indicar que desea conectarse a través de SSH y PowerShell.

Cuando intente conectarse por primera vez con un nombre de usuario y contraseña, deberá crear una clave privada SSH. Para hacerlo, se le solicitará como puede ver a continuación. Cuando se le solicite, escriba "y" para aceptar.

Luego se le solicitará la contraseña del usuario con el que inició sesión actualmente.

Tenga en cuenta que en este ejemplo el cliente Windows 10 y el servidor SSH de Windows Server están en el mismo dominio de Active Directory. De forma predeterminada, PowerShell Remoting intentará autenticarse con el usuario que inició sesión. También puede utilizar 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 mensaje familiar de PowerShell Remoting.

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

También puede utilizar WsMan como protocolo de transporte utilizando el parámetro ComputerName sin utilizar el parámetro SSHTransport.

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

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

Resumen

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

Si desea obtener más información sobre PowerShell y SSH, asegúrese de consultar el artículo de documentación de Microsoft PowerShell Remoting over SSH.

Colaboradores de #PS7Now

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

AuthorTwitterBlog
Josh King@WindosNZhttps://toastit.dev/
Adam Bertram@adbertramhttps://adamtheautomator.com/
Jonathan Medd@jonathanmedd
Thomas Lee@doctordnshttps://tfl09.blogspot.com/
Prateek Singh@singhprateikhttps://ridicurious.com
Dave Carroll@thedavecarrollhttps://powershell.anovelidea.org/
Dan Franciscus@dan_franciscushttps://winsysblog.com/
Jeff Hicks@jeffhickshttps://jdhitsolutions.com
Josh Duffney@joshduffneyhttp://duffney.io/
Mike Kanakos@MikeKanakoshttps://www.networkadm.in/
Tommy Maynard@thetommymaynardhttps://tommymaynard.com//

Artículos relacionados