SSH a través de PowerShell


54

¿Es posible abrir una sesión SSH en PowerShell? Actualmente uso PuTTY, pero sería bueno si no fuera necesario.


1
Sé que no es compatible de forma nativa, pero también me encantaría ver una solución.
egorgry

55
¿Qué tiene de malo simplemente llamar a putty.exe (o plink.exe) desde la línea de comandos?
Javier

44
Javier: Comencemos con Plink siendo solo un cliente SSH y carente por completo de las características de emulación de terminal.
Grawity

+1, me gustaría ver una solución yo mismo. Y en su mayor parte odio tanto la masilla. (Usuario de SecureCRT)
Urda

1
Microsoft anuncia soporte futuro para SSH: blogs.msdn.com/b/powershell/archive/2015/06/03/…
nw.

Respuestas:



9

Escribí un módulo para tratar con sesiones SSH de PowerShell, basado en la biblioteca SSH.NET que se encuentra en CodePlex. Tiene New-SshSession para crear conexiones (se admiten varios objetivos con diferentes credenciales), y luego puede usar Invoke-SshCommand para ejecutar comandos en cualquier número de hosts de destino. Incluso hay una Enter-SshSession que tiene un shell muy básico e interactivo.

El articulo esta aqui .

Joakim


6

Descarga OpenSSH para Windows y elige instalar solo el cliente durante la instalación. El instalador completo, incluido el servidor, tiene menos 3 MB y el cliente funciona bien.


2
Hay muchas advertencias en ese proyecto sobre el instalador que pisa fuerte la variable RUTA del sistema en Windows 7 y 8: ¡tenga cuidado!
Patrick M

2

Todavía estoy publicando una respuesta a esta pregunta, porque encontré que la respuesta aceptada no satisface mis necesidades (solo una solución paga u otra que no maneja bien el terminal).

Entonces, la solución obvia a este problema es instalar cygwin. Realice una instalación mínima si solo desea ssh, pero dado que powershell proporciona un nivel básico de compatibilidad con shells * nix (los comandos básicos siguen ahí, "/" para directorios, etc.), es realmente posible usar cosas de cygwin dentro de Powershell.

Cygwin instala aquí


1
Cygwin? Bleck! También podría encender una VM ...
Urda

Cómo es eso ? ssh es un ejecutable compilado de Windows. Si no quieres interactuar con unix-y, no debería sorprenderte que tengas que instalar algunas librerías para eso.
raph.amiard

Vea la respuesta de Ameer Deen, creo que esa es la mejor solución aquí y funciona muy bien.
Hosh Sadiq

1
@HoshSadiq De la descripción de OpenSSH para Windows: "Un instalador para una instalación mínima del entorno Cygwin adecuado para ejecutar un servidor OpenSSH en la plataforma Windows".
Douglas Ludlow


1

Si la máquina de destino es un cuadro de Windows, puede utilizar PowerShell Remoting en su lugar.

Definitivamente no es lo mismo que SSH. Hay ventajas (traer objetos de vuelta por el cable) y desventajas (¿y si el objetivo es Linux?




1

Una forma de obtener un cliente ssh nativo muy bueno es instalar git desde GitHub ( https://windows.github.com/ ).

Crea un acceso directo a una ventana elegante con todas las rutas configuradas correctamente para usar git en powershell. Eso viene automáticamente con binarios ssh y scp en la ruta.

No estoy seguro de qué implementación es, pero tiene una sensación similar a Linux, es decir, no parece que esté basado en .Net o use comandos de PowerShell.

Está recogiendo la clave privada que he configurado en $ home / .ssh / en formato openssh y tal vez alguien pueda confirmar. Se siente como si fuera openssh.

Para hacerlo aún mejor, lo he integrado en mi perfil normal de PowerShell haciendo lo siguiente en mi $ profile. Eso significa que no tengo que usar el atajo de github.

. (Resolve-Path "$env:LOCALAPPDATA\GitHub\shell.ps1") . (Resolve-Path "$env:LOCALAPPDATA\GitHub\PoshGit_*\profile.example.ps1")


1

Posh-SSH es un módulo gratuito de la revista Poswershell que funciona para Powershell 3.0 y superior.

Está disponible en http://www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module/

La documentación completa se proporciona en el enlace de arriba. En un script, realmente no quieres conexiones interactivas, por lo que son dos pasos. Primero crea la sesión. Segundo envío de comandos.

$ServerConnection = New-SSHSession -KeyFile $keyLocation -ComputerName $sshComp -Credential $mycreds -AcceptKey

La primera sesión que cree tendrá un índice de 0.

Invoke-SSHCommand -Index 0 -Command "some command to run over ssh"

Se recomienda poner la creación de la conexión en un intento de captura y validar la sesión existente antes de ejecutar un comando. Esto hace que interactuar con servidores Linux desde el interior de un script de PowerShell funcione bien.


-2

SSH y SFTP sin duda representan el estándar de la industria en aplicaciones de acceso remoto seguro. Afortunadamente, es posible que establecer una conexión pueda ser realmente rápido y fácil. Desafortunadamente, la verdad es que hay muchas posibilidades de perder el tiempo con la resolución de problemas.

Desafortunadamente, Windows no tiene un cliente ssh estándar o un software deamon a bordo.

Esto da como resultado un zoológico de implementaciones más o menos extrañas, código abierto, freeware, shareware, etc. Algunas veces los sistemas no funcionan.

Dentro de Windows, es una cosa de dinero. Microsoft simplemente no quiere que muchos usuarios se conecten fácilmente a una computadora con licencia. Quieren vender sus propias soluciones. Por lo tanto, no ofrecen SSL nativo.

Cygwin es la mejor solución disponible.

putty / plink / winscp como software de cliente. También está bien para secuencias de comandos.

Hay demonios ssh para la integración de Windows, pero las soluciones son más o menos inestables.

la forma más estable de ejecutar ssh deamon en windwos es ejecutarlo dentro de una máquina virtual Linux, se puede realizar con una pequeña distribución de Linux.


44
Esto realmente no responde la pregunta de los OP. ¿Puede editar su pregunta para indicar por qué cygwin es una solución a la pregunta planteada por el OP?
Digo reinstalar a Mónica el

OP no está pidiendo alternativas que no sean soluciones relacionadas con PowerShell.
cychoi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.