Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Instalación de Net::SFTP

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mie Jun 04, 2008 1:40 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Instalación de Net::SFTP Responder citando

Buen día, Perleros, tengo una duda y es que yo tengo mi programa ssh.pl.

Al momento de correrlo me dice:
Cita:
Can't locate Net/SFTP.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at ssh.pl line 3.
BEGIN failed--compilation aborted at ssh.pl line 3.


Doy por hecho que no está instalado así que entro en -MCPAN -e shell; para dar un install, al Net:SFTP, pero al final cuando hace el test me dice.

Cita:
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01-load........Can't locate Net/SSH/Perl/Buffer.pm in @INC (@INC contains: /root/.cpan/build/Net-SFTP-0.10/blib/lib /root/.cpan/build/Net-SFTP-0.10/blib/arch /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Buffer.pm line 6.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Buffer.pm line 6.
Compilation failed in require at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Attributes.pm line 7.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Attributes.pm line 7.
Compilation failed in require at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP.pm line 8.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP.pm line 8.
Compilation failed in require at t/01-load.t line 5.
BEGIN failed--compilation aborted at t/01-load.t line 5.
t/01-load........dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED test 1
Failed 1/1 tests, 0.00% okay
t/06-circular....Can't locate Net/SSH/Perl/Buffer.pm in @INC (@INC contains: /root/.cpan/build/Net-SFTP-0.10/blib/lib /root/.cpan/build/Net-SFTP-0.10/blib/arch /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Buffer.pm line 6.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Buffer.pm line 6.
Compilation failed in require at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Attributes.pm line 7.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP/Attributes.pm line 7.
Compilation failed in require at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP.pm line 8.
BEGIN failed--compilation aborted at /root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP.pm line 8.
Compilation failed in require at t/06-circular.t line 5.
BEGIN failed--compilation aborted at t/06-circular.t line 5.
t/06-circular....dubious


Busco los archivos con un find, y me dice que están en:

Código:
/root/.cpan/build/Net-SFTP-0.10/lib/Net/SFTP.pm
/root/.cpan/build/Net-SFTP-0.10/blib/lib/Net/SFTP.pm
------------


¿Alguien me podría dar un norte de lo que está pasando___¡??? o dónde estoy haciendo algo mal...
Mensaje Mie Jun 04, 2008 4:15 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Todo parece indicar que falto instalar antes el módulo IO::Socket, pero ahora aparece
Cita:
cpan> install Net::SSH::Perl
Running install for module Net::SSH::Perl
Running make for D/DB/DBROBINS/Net-SSH-Perl-1.30.tar.gz
Is already unwrapped into directory /root/.cpan/build/Net-SSH-Perl-1.30
Has already been processed within this session
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01-compile.....ok
t/02-buffer......ok
t/03-packet......ok 1/10


Y se queda ahí pensado.... Confused
Mensaje Mie Jun 04, 2008 4:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Cierto, se queda pensando mucho rato... ten paciencia. Está haciendo muchos cálculos. Abre otra terminal y ejecuta el comando top, para ver el consumo de CPU.
Mensaje Mie Jun 04, 2008 4:37 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Pues voy a dejarla toda la noche, a ver qué pasa.

Porque sin ese módulo no puedo acceder ni por ssh ni ftp, ni nada, así que se tiene que instalar, o que otra opción se sugieren para contactar a un equipo remoto, (donde pueda especificar el puerto) para bajar un archivo...

Y ya intenté wget (y se queda pensando) y sftp pero tampoco y se me están terminando las ideas...

Question
Mensaje Mie Jun 04, 2008 4:47 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

A mi me tardó unos pocos minutos.

Si no te funcionó el comando sftp, es muy posible que no te funcione el módulo Perl.
Mensaje Jue Jun 05, 2008 2:23 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Confused
Pues algo pasa no que se que sea, pero se queda en esta parte.

Cita:
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01-compile.......ok
t/02-buffer........ok
t/03-packet........1/10


Y no se puede instalar
Mensaje Jue Jun 05, 2008 2:34 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

¿Alguna idea de cómo obtener un archivo, por medio de Perl, que no sea por Net:: ?
Mensaje Jue Jun 05, 2008 3:03 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Programando los sockets, con el módulo Socket.

Te hará falta mucha paciencia... y no conseguirás nada.

El problema no está en la programación.

A ver... por el principio... ¿A qué puerto y con qué protocolo debes conectarte?

¿Has probado a hacer un
Código:
telnet <servidor> <puerto>

para comprobar si el servidor responde o no?
Mensaje Jue Jun 05, 2008 3:14 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Correcto El problema esta en la conf
En principio

Cita:
root@apolo:~$ nmap XXX.XXXX.XXX

Starting Nmap 4.53 ( http://insecure.org ) at 2008-06-05 16:09 CDT
Interesting ports on XXX.XXX.XXX:
Not shown: 1649 closed ports
PORT STATE SERVICE
20/tcp open ftp-data
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
135/tcp open msrpc
136/tcp open profile



Si yo me conecto por ssh usuario@XXX.XXX.XXX
SI me puedo conectar

Si me quiero conectar por telnet
Código:
root@apolo:~$ telnet XXX.XXX.XXX:23
telnet: could not resolve XXX.XXX.XXX:23/telnet: Name or service not known


Y si me quiero conectar por Filezila,
Si me conecto y se supone q filezila utila SFTP

O en su caso se puede hacer algo asi con perl?

Cita:
sftp usuario@XXX.XXX.XXX
pasword
cd /usr/users/
get alarmas.log


O en su caso de pude hacer esto en un cron??

Quen



Como ves, Crying or Very sad


Confused
Mensaje Jue Jun 05, 2008 3:37 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

No es telnet xxx.xxx.xxx.xxx:23, sino telnet xxx.xxx.xxx.xxx 23.

Está claro que funciona el puerto del ssh, por lo que entonces se puede acceder por ese puerto, incluso de forma programada. La cuestión es hacer una instalación correcta. Como el caso es que esa instalación puede ser compleja (porque intervienen varios módulos criptográficos), recuerda que existen versiones de los módulos escritos en puro Perl (sin librerías compiladas).

De todas formas... esos módulos son tan importantes que la gran mayoría de las distribuciones Linux/Unix ya disponen de esas librerías como paquetes de software de la distribución.

No uses el comando cpan para instalarlos, sino que debes usar el programa de gestión de software del sistema operativo.

Y finalmente, la programación. Hay algunos módulos que son muy fáciles de usar, pero otros no. Un ejemplo es Net::SFTP, que, además, tiene 3 años de edad.

Pero ese módulo no es el único. Por ejemplo, Net::SFTP::Foreign. Este módulo no depende de ninguna librería, sino que usa el comando ssh del sistema. Si dices que haciendo un ssh te funciona, entonces este módulo te vendrá como anillo al dedo. Tiene más opciones que Net::SFTP, a cambio de tener que ejecutar un proceso nuevo (el comando ssh) y que solo soporta la versión 2 del protocolo.

Ya nos dirás...

P.D. Cuando te conectas por ssh, ¿tienes que meter una contraseña o no? ¿Tienes que meter además una passphrase?
Mensaje Jue Jun 05, 2008 5:27 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Efectivamente ese módulo es la solución aunque sería:
Perl:
use Net::SFTP::Foreign;
use Net::SSH::Expect;


Pero no logro hacer que funcione y en teoría es muy simple.

Perl:
#!/usr/bin/perl
use Net::SFTP::Foreign;
use Net::SSH::Expect;
##################################
        # You can do SSH authentication with user-password or without it.
        # Making an ssh connection with user-password authentication
        # 1) construct the object
        my $ssh = Net::SSH::Expect->new (
            host => "XXX.XXX.XXX",
            password=> 'elpasword',
            user => 'apolo',
            raw_pty => 1
        );
        # 2) logon to the SSH server using those credentials.
        # test the login output to make sure we had success
        my $login_output = $ssh->login();
        if ($login_output !~ /Welcome/) {
            die "NO SE PUDO CONECTAR $login_output";
        }
#############################
my $remote = "/usr/users/equipo/";
my $local = "/home/apolo/Desktop/";

Net::SFTP::Foreign->new($sftp->get($remote,$local,))or die "No se Puede logear ", $sftp->message."\n";

$sftp->quit;
Mensaje Jue Jun 05, 2008 7:25 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Ese código es muy curioso... ¿de dónde lo has sacado?

Yo he instalado Expect, no el módulo Net::SSH::Expect.

A mí me funciona muy bien, pero claro, la comunicación con el servidor se basa, no en contraseñas, sino que cada máquina se intercambia las cables públicas. Como dice el módulo, es mucho mejor ese tipo de verificación.

Si no puedes hacer lo de la verificación por claves, este es el código que a mi me funciona, usando el clásico usuario/contraseña.

Perl:
#!/usr/bin/perl
use Net::SFTP::Foreign;

my $host = 'aproxi38.aproxi.net';
my $port = 2222;
my $user = 'jferrero';
my $pass = 'defensor';

my $sftp = Net::SFTP::Foreign->new(
    host     => $host,
    port     => $port,
    user     => $user,
    password => $pass,
#    more     => '-v',   # No es compatible esto con la opción 'password' anterior
);

$sftp->error and die "SSH connection failed: " . $sftp->error;

print $sftp->cwd, "\n";

my $ficheros = $sftp->ls;
print join("\n", map { $_->{filename} } @$ficheros );
Mensaje Vie Jun 06, 2008 12:01 pm
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Efectivamente mi buen Explorer, sí funcionó, creo que mi confusión vino del siguiente párrafo de Net::SFTP::Foreign:

Cita:
password => $password
passphrase => $passphrase

Use Expect to handle password authentication or keys requiring a passphrase. This is an experimental feature!
An explicit check for errors should be included always after the constructor call:
my $sftp = Net::SFTP::Foreign->new(...);
$sftp->error and die "SSH connection failed: " . $sftp->error;


Voy a investigar más adelante el módulo que bajé, porque también funciona; solamente que hace la entrada al equipo y hasta ahí se queda, pero por mientras voy a utilizar la otra aplicación, solo faltaría poner
Perl:
$sftp->get($remote,$local);


Y todo listo...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group