• Publicidad

Perl SSH o SFTP en Windows

Todo lo relacionado con lenguajes de programación distintos de Perl: PHP, Java, C++, Ruby, Python, etc.

Perl SSH o SFTP en Windows

Notapor alperez » 2014-01-20 06:58 @332

Hola.

Me gustaría saber si utilizar estos dos módulos. Estoy intentado hacer un script que se conecte por SFTP desde una máquina Windows a Linux para traerme datos, y soy incapaz, tanto de instalar el módulo como de hacerlo funcionar.

Me da errores por todos los lados.

¿Alguna ayudita?

Muchas Gracias.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Publicidad

Re: Perl SSH o SFTP en Windows

Notapor Aceitunas » 2014-01-20 10:27 @477

A mi me pasaba antes también, que no atinaba a instalar los módulos. En este tema te lo explica explorer:

instalacion-de-modulos-y-bibliotecas-en-perl-t7875.html

Lo mejor es instalarlo desde el gestor de Windows, con Active State es el Perl Package Manager, no sé si con otros intérpretes será el mismo.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Perl SSH o SFTP en Windows

Notapor explorer » 2014-01-21 06:44 @322

Nos tienes que decir qué distribución Perl estás usando en Windows.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl SSH o SFTP en Windows

Notapor salva » 2014-01-22 07:24 @350

¿De qué módulo hablas exactamente?

La verdad es que Windows y SSH no se llevan demasiado bien.

Hasta hace no mucho tu única opción hubiese sido Net::SSH::Perl/Net::SFTP. El problema es que instalar estos módulos es casi imposible por las dependencias, además tiempo que nadie los mantiene y tienen bastantes bugs conocidos. Yo personalmente desaconsejo completamente su uso.

Desde hace algunos años también está disponible Net::SSH2, que es un wrapper de la librería escrita en C libssh2. Existen paquetes precompilados (PPM) para varias distribuciones por lo que instalarlo es sencillo. El problema es que es muy difícil de usar y además libssh2 todavía esta bastante verde y aparecen bugs cada dos por tres.

Si solo necesitas SFTP puedes utilizar mi módulo Net::SFTP::Foreign, que puede utilizar el binario de OpenSSH o plink para conectarse a la máquina remota, o también Net::SSH2 con el módulo de backend Net::SFTP::Foreign::Backend::Net_SSH2.

Últimamente también he estado trabajando en el módulo Net::SSH::Any que ofrece una interfaz de alto nivel sobre distintos backends. En Windows, el backend que funciona es el de Net::SSH2.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Perl SSH o SFTP en Windows

Notapor alperez » 2014-01-23 06:59 @333

Hola,

Efectivamente, salva, estoy utilizando tu módulo Net::SFTP::Foreign; lo instalé con el Perl Package Manager.

El problema que tengo a la hora de crear el objeto SFTP es que cuando lo va a crear a nivel de Windows me aparece un mensaje en la línea de comando CMD que dice "ssh" no se reconoce como un comando interno o externo,

No entiendo el mensaje, es decir, voy a necesitar otro módulo aparte del Net::SFTP::Foreing para poder hacer el sftp y por eso me sale que no reconoce el comando ssh. ¿O tengo que configurar alguna cosa en Windows para poder usar el módulo?

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Perl SSH o SFTP en Windows

Notapor salva » 2014-01-23 07:15 @344

Net::SFTP::Foreign necesita un componente que se encargue de la conexión SSH con el servidor. Por defecto, usa el cliente binario ssh del sistema, pero Windows no trae ninguno. Una opción es descargar de Internet el programa plink (que es parte de PuTTY) y utilizarlo, la documentación explica cómo, o el port de OpenSSH para Windows.

Pero hoy en día tu mejor opción es instalar el módulo Net::SSH2 (hay paquetes precompilados que puedes encontrar en Internet) con el módulo de backend Net::SFTP::Foreign::Backend::Net_SSH2. Desafortunadamente, Net::SSH2/libssh2 en su versión estable, tiene algunos bugs que a veces causan que transferencias muy grandes se cuelguen. Pero es lo que hay.

El año pasado dediqué bastante esfuerzo a corregir esos bugs y mis modificaciones ya están en las versiones de desarrollo de Net::SSH2 y libssh2, pero dichos proyectos aún no han lanzado nuevas versiones... puedes utilizar las versiones de desarrollo, pero el proceso de compilación es bastante complicado.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Perl SSH o SFTP en Windows

Notapor alperez » 2014-01-23 08:47 @408

Ok,

Muchas gracias, era justo lo que necesitaba saber. Intentaré las opciones que me das, muchas gracias.

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Perl SSH o SFTP en Windows

Notapor alperez » 2014-02-04 07:12 @341

Hola de nuevo,

Ya conseguí que me funcionara mi script desde Windows. Finalmente utilicé la opción de plink y la verdad que muy bien.
Pero ahora me ha surgido otra duda revisando todos los métodos del módulo.

¿Sería posible visualizar a través del script el estado de la transferencia? Estoy usando el método "rget", he intentado utilizar la opción resume pero no creo que la esté aplicando bien.

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Perl SSH o SFTP en Windows

Notapor salva » 2014-02-04 09:18 @429

rget (y para el caso rput) acepta la opción wanted a la que se le pasa una subrutina que es llamada antes de que cada fichero sea copiado para ver si lo queremos o no. En esa función puedes imprimir información sobre el fichero que se va a copiar (y asegúrate de acabar la misma devolviendo un valor verdadero para que realmente se copie).

Ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $sftp->rget($rpath, $lpath, wanted => sub { print "transferring $_[1]{filname}\n"; 1 })
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Programación en general

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados